C++ 彩色boost::log显示变换的颜色

C++ 彩色boost::log显示变换的颜色,c++,boost,C++,Boost,我需要添加颜色来提升Windows上的日志。非常简单-如果错误-使用红色墨水,如果警告-黄色墨水,否则-白色。引用我的代码没有意义。我使用的正是这个解决方案(第二个答案,我想第一个答案仅适用于Linux): 我发现其他的很少,但都是基于相同的原则-设置控制台的前景颜色,使用win32 api,并在接收器中完成。问题是它不好。如果日志接收来自多个源的消息,有时会将颜色应用于一个片段(甚至不是完整的)行,通常还会应用于另一行(上一行或下一行)。我声明sink是同步的(异步的,着色看起来像疯子的画)

我需要添加颜色来提升Windows上的日志。非常简单-如果错误-使用红色墨水,如果警告-黄色墨水,否则-白色。引用我的代码没有意义。我使用的正是这个解决方案(第二个答案,我想第一个答案仅适用于Linux):

我发现其他的很少,但都是基于相同的原则-设置控制台的前景颜色,使用win32 api,并在接收器中完成。问题是它不好。如果日志接收来自多个源的消息,有时会将颜色应用于一个片段(甚至不是完整的)行,通常还会应用于另一行(上一行或下一行)。我声明sink是同步的(异步的,着色看起来像疯子的画)。有没有办法稳定/解决这个问题


Voitek

即使您的日志功能是线程安全的,使用它可能仍然需要同步

考虑两个线程,每个线程执行以下操作之一:


  • strm您是从单个线程登录的吗?看起来你有同步问题,颜色错误只是一个副作用。不。从许多线程。每个线程都有自己的生命。但事实就是这样。对于整个应用程序。boost::log不是线程安全的吗?我确信它可以对来自多个线程的消息进行排队…不幸的是,这个答案中没有任何内容是可用的。我无法在Windows中添加一些特殊字符来为文本着色。着色仅通过win32 api可用。至于第二个建议——互斥锁——它也不起作用。这里的问题是流并没有在sink函数中刷新。然后在第一个
    SetConsoleTextAttribute
    之前锁定互斥体,在std::cout和第二个
    SetConsoleTextAttribute
    之后解锁互斥体。