跨多个线程的任务的日志关联



我的软件中的任务涉及几个步骤,其中每个步骤可能会也可能不会在不同的线程中执行。每个步骤都有一些日志,我使用 log4j 作为日志记录服务。

一个令人头疼的问题是,很难将不同线程打印的日志与它们所属的任务相关联。在单线程模式下,线程名称是一个很好的指示器,但它在多线程模式下不起作用。我不想通过线程传递任务指示器,因为它很烦人并且会给程序员带来负担。

我想知道有人遇到同样的问题并有一个很好的解决方案?谢谢。

查找log4j关于MDC(映射诊断上下文)和NDC(嵌套诊断上下文)的文档。以下是本文的摘录

嵌套诊断上下文 (NDC) 和映射诊断上下文 (MDC) 在同时涉及一个应用程序的情况下提供帮助 为多个客户提供服务,并且您有兴趣分离或 从这些多个客户端中的每一个分发日志内容。一个网络 应用程序是这种情况的一个很好的例子。

那么,我们如何分离或区分来自多个客户端的内容呢?由 使用特定于客户端的信息标记每个日志语句。这,在 一个典型的 Web 应用程序,可以包括,除其他外, 客户端的 IP 地址,可供 servlet 随时使用 容器。因此,在 NDC 中,当 输入上下文,并在离开该上下文时弹出它。log4j 用途 写入追加程序时此特定于上下文的信息,如果在 您的关联布局,则使用 %x 转换模式。

有两个类org.apache.log4j.MDC和org.apache.log4j.NDC是为此目的而创建的。只需参考Javadocs:NDC和MDC

最新更新