彩色增强::日志显示偏移的颜色

Colored boost::log shows shifted colors

本文关键字:颜色 显示 增强 日志 彩色      更新时间:2023-10-16

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

如何为boost::log控制台输出添加颜色编码?

我发现了其他一些,但都是基于相同的原理——使用win32api设置控制台前景色,并在水槽中进行设置。问题是它不好。若日志接收来自多个来源的消息,有时会将颜色应用于片段(甚至不是完整的(行,通常还会应用于另一行(上一行或下一行(。我宣布sink是同步的(使用异步,着色看起来像一个疯子的画(。有什么办法稳定/解决这个问题吗?

Voitek

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

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

  1. strm << red << "message";
  2. strm << white << "other message";

调度程序可能会调度

  • 线程1执行strm << red
  • 线程2执行strm << white
  • 线程1执行strm << "message"
  • 线程2执行strm << "other message"

您得到的是"message"answers"other message",均为白色。这仍然被认为是线程安全的。

第一个选项是将彩色消息连接在一个字符串中,并将其提供给日志API:

strm << red + "message";。您需要修复这一行,使red是一个std:string或可以与"message"连接的东西。但重要的一点是loggin API一次只得到一个带有颜色和内容的调用。

第二种选择是在每个提交颜色和文本的日志块周围放置一个互斥对象。