C++ 线程名称映射和 log4cxx

标签 c++ multithreading log4cxx

有了 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/

相关文章:

c++ - 空列表中 va_arg 的返回值是多少?

c++ - 如何在最小化每秒更新影响的同时存储和推送模拟状态?

java - 跳到单线程 ExecutorService 中的下一个任务?

java - 此生产者消费者的非法监视器状态异常?

C++ 日志库设置

c++ - 无法打开包含文件 : 'log4cxx\logger.h' : No such file or directory

c++ - vector 迭代器不兼容

c++ - 为什么 malloc 没有填满内存?

c++ - 如何在 C++ gSOAP 生成的类中使用 SSL

c++ - 套接字在处理后打开,打开它完成