使用ostream进行C++日志记录

Ben*_*n D 0 c++ stream

我正在制作一个记录器.我想创建一个log()以流作为输入的函数.

例如:

log("hello"<<" "<<"world"<<10<<"\n");
Run Code Online (Sandbox Code Playgroud)

我也希望它是线程安全的.

我重新定义了<<运算符,所以我可以这样做:

log()<<"hello"<<"world"<<10<<"\n"
Run Code Online (Sandbox Code Playgroud)

但是这个操作不是线程安全的.

如何使其线程安全?

Ben*_*igt 9

已经log()返回该缓存在内存中所有的输出临时对象.此对象的析构函数将在表达式的末尾运行,并应在单个原子操作中将累积的数据刷新到实际流中(由您决定是否使该操作成为原子).

这将使您的第二种语法可行:

log()<<"hello"<<"world"<<10<<"\n";
Run Code Online (Sandbox Code Playgroud)