我需要添加颜色来提升Windows上的日志。非常简单-如果出错-使用红色墨水,如果警告-黄色墨水,否则-白色。没有必要引用我的代码。我使用的正是这个解决方案(第二个答案,我想第一个答案只适用于Linux ):
How to add color coding to boost::log console output?
我发现很少有其他的,但它们都是基于相同的原则-设置控制台前景颜色,使用win32应用程序接口,并在接收器中执行此操作。问题是它并不好。如果log从多个源接收消息,有时会将颜色应用于片段(甚至不是完整的)行,通常是另一行(上一行或下一行)。我声明接收器是同步的(使用异步,着色看起来像一个疯狂的人的图画)。有什么方法可以稳定/修复这个问题吗?
Voitek
发布于 2019-11-19 23:36:13
即使您的日志函数是线程安全的,使用它可能仍然需要同步。
考虑两个线程,每个线程执行以下操作之一:
strm << red << "message";strm << white << "other message";调度程序可能会安排
线程%1执行strm << red
strm << white
strm << "message"
strm << "other message"你会看到"message“和"other message",两者都是白色的。这仍然被认为是线程安全和正常的。
第一种选择是将着色的消息连接到单个字符串中,并将其提供给您的日志API:
strm << red + "message";。您需要修复这一行,使red成为std:string或可以与"message"连接的内容。但重要的是,loggin API在一次go中获得了一个带有颜色和内容的调用。
第二种选择是在提交颜色和文本的每个日志块周围放置一个互斥锁。
https://stackoverflow.com/questions/58935481
复制相似问题