我的软件中的任务涉及几个步骤,其中每个步骤可能会或可能不会在不同的线程中执行。每个步骤都有一些日志,我使用log4j作为日志记录服务。
头痛问题是很难将不同线程打印的日志与它们所属的任务相关联。在单线程模式下,线程名称是一个很好的指示器,但它不能在多线程模式下工作。我不想通过线程传递任务指示器,因为它很烦人并且会给程序员带来负担。
我想知道是否有人面临同样的问题并且有一个很好的解决方案?谢谢。
答案 0 :(得分:1)
在MDC(映射诊断上下文)和NDC(嵌套诊断上下文)上查找log4j's documentation。以下是this article
的摘录嵌套诊断上下文(NDC)和映射诊断上下文(MDC) 帮助同时涉及一个应用程序的情况 为多个客户提供服务,您有兴趣分离或 distingushing来自这些多个客户端的日志内容。网络 应用程序是这种情况的一个很好的例子。
那么我们如何将内容与多个客户分开或区分?通过 使用特定于客户端的信息标记每个日志语句。这个,在 典型的Web应用程序,除其他外,还可以包括 客户端的IP地址,可供servlet随时使用 容器。因此,在NDC中,您可以在堆栈中将此信息推送到堆栈 输入上下文,并在离开该上下文时弹出它。 log4j使用 写入appender时的特定于上下文的信息,如果在 您的关联布局,您使用%x转换模式。
答案 1 :(得分:0)