【发布时间】:2015-07-09 14:07:36
【问题描述】:
我有两个不同的线程都记录到单独的Poco::WindowsColorConsoleChannel 频道。
但有时消息会出现交错,例如如果一个线程记录aaaaaaa,另一个记录bbbbbbbb,那么屏幕可能看起来像abbbbbaaaaaabbb。
线程使用完全不同的Logger 对象和不同的通道对象。
如果使用默认频道,也会发生同样的事情。这个问题在颜色控制台通道中尤其明显,因为它使颜色看起来像是错误的线被着色了。
有没有办法让每个日志行“原子”?
注意:我还没有检查登录到SimpleFileChannel 时是否会出现同样的问题,但如果是这样,那么我也需要一个解决方案:)
【问题讨论】:
-
当然可以将每个对记录器的调用包装在关键部分,但我希望有更好的东西,例如日志框架中内置的东西能够处理这个问题。
-
您究竟是如何创建这些不同的记录器对象的?
-
@Alex 线程使用
Poco::Logger::get("bla"),主应用使用Poco::Application的成员函数logger(),在每种情况下我都使用setChannel附加了WindowsColorConsoleChannel
标签: c++ multithreading logging poco-libraries