我正在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()
中调用它。