首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Colored::log显示转换的颜色

Colored::log显示转换的颜色
EN

Stack Overflow用户
提问于 2019-11-19 21:44:07
回答 1查看 103关注 0票数 0

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

How to add color coding to boost::log console output?

我发现很少有其他的,但它们都是基于相同的原则-设置控制台前景颜色,使用win32应用程序接口,并在接收器中执行此操作。问题是它并不好。如果log从多个源接收消息,有时会将颜色应用于片段(甚至不是完整的)行,通常是另一行(上一行或下一行)。我声明接收器是同步的(使用异步,着色看起来像一个疯狂的人的图画)。有什么方法可以稳定/修复这个问题吗?

Voitek

EN

回答 1

Stack Overflow用户

发布于 2019-11-19 23:36:13

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

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

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

调度程序可能会安排

线程%1执行strm << red

  • thread %2执行strm << white

  • thread %1执行strm << "message"

  • thread %2执行strm << "other message"

你会看到"message“和"other message",两者都是白色的。这仍然被认为是线程安全和正常的。

第一种选择是将着色的消息连接到单个字符串中,并将其提供给您的日志API:

strm << red + "message";。您需要修复这一行,使red成为std:string或可以与"message"连接的内容。但重要的是,loggin API在一次go中获得了一个带有颜色和内容的调用。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58935481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档