如何在c++中编写进行实际日志记录的变量参数记录器函数



我正在c++中编写一个logger类,我想将不同文件中的所有日志重定向到一个函数,该函数决定在哪里写入日志。

例如

func A()
{
int a =10;
std::string b = "test";
cout<<"printing"<<a<<b<<endl;
}
func B()
{
unsigned long t = 6700;
cout<<t<<endl;
}

与cout不同,我希望有一个函数,它接受变量参数并发送到公共函数,该函数最终打印或写入文件或使用syslog。

如果你尝试了一些简单的东西,比如这样呢?

std::unique_ptr<std::ostream> g_ostream_ptr;

std::ostream& log() {
return *g_ostream_ptr;
}
void initialize_log() { 
// initialize `g_ostream_ptr` based on environment variable
// or other configuration information.
const char* filename = std::getenv("LOG_FILE");
if (!filename)
filename = "/dev/stdout"
g_ostream_ptr = std::make_unique<std::ostream>(filename);
}

然后你可以这样使用它:

void f() {
log() << “f called.” << std::endl;
}

您必须确保在某个时刻调用initialize_log,可能使用std::call_once,也可能只是在main()中调用它。

相关内容

  • 没有找到相关文章

最新更新