C++线程名称映射和 log4cxx

发布于 2025-01-05 02:23:11 字数 292 浏览 0 评论 0原文

使用 std::thread ,现在可以轻松地在程序状态中保留线程名称列表(通过包装线程,或使用单例来管理线程列表)。

我开始使用 log4cxx 进行日志记录,我想让它显示线程名称。但是,这意味着我无法使用 PatternLayout。线程号本身并不是很有用。

最好的方法是什么?我是否只能输出地图,或者我可以以巧妙的方式重写 PatternLayout/ConversionPattern 来完成我想要的事情吗?如果我重载它,我如何指向配置文件中的类?或者我可以添加一个转换字符吗?

With std::thread, it is now trivial to keep a list of threads names in the program state (either by wrapping the thread, or by using a singleton to manage the thread list.)

I am starting to use log4cxx for my logging, and I'd like to have it display the thread name. However, this means I cannot use the PatternLayout. The thread numbers aren't very useful on their own.

What is the best way to do this? Am I stuck with just outputting a map, or can I override PatternLayout/ConversionPattern in a clever way to do what I want? And if I overload it, how do I point to the class in the config file? Or can I possibly add a conversion character?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

思念绕指尖 2025-01-12 02:23:11

在程序中设置记录器之前使用 MDC 输入线程名称

 MDC::put( "threadName", threadNameString);

然后在 XML 配置中

   <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%X{threadName} "/>
    </layout>

因此在每条日志消息中都会显示您的线程名称。

有关详细信息,请检查此问题的答案:将进程 ID 添加到日志log4cxx 中的文件名

Put your thread names using MDC before setting logger in your program

 MDC::put( "threadName", threadNameString);

Then at XML config

   <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%X{threadName} "/>
    </layout>

So at each log message your thread name will apear.

For more info check answer of this question: Add process id to log file name in log4cxx

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文