有了 std::thread
,现在可以轻松地在程序状态中保留线程名称列表(通过包装线程,或使用单例来管理线程列表。)
我开始使用 log4cxx 进行日志记录,我想让它显示线程名称。但是,这意味着我不能使用 PatternLayout。线程编号本身并不是很有用。
最好的方法是什么?我是坚持只输出 map ,还是可以以一种聪明的方式覆盖 PatternLayout
/ConversionPattern
来做我想做的事?如果我重载它,我如何指向配置文件中的类?或者我可以添加一个转换字符吗?
最佳答案
在程序中设置记录器之前使用 MDC 放置线程名称
MDC::put( "threadName", threadNameString);
然后在 XML 配置中
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%X{threadName} "/>
</layout>
因此在每条日志消息中都会出现您的线程名称。
有关更多信息,请查看此问题的答案:Add process id to log file name in log4cxx
关于C++ 线程名称映射和 log4cxx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9246677/