JUL(Java.util.Logging)的MDC(映射诊断上下文)支持

时间:2013-05-29 10:49:13

标签: java slf4j java.util.logging mdc

我有一个使用Slf4j和java.util.Logging设置的日志记录机制。我有几个线程,所以我无法从日志中得到一个清晰的想法,因为它们是混合的。现在我尝试使用MDC概念在日志文件中添加更多数据,以便它们清晰。

问题与Slf4j中的问题相同,尽管它支持MDC java.util.Logging不支持。但它说

  

如果底层框架不提供MDC,例如java.util.logging,那么SLF4J仍将存储MDC数据,但其中的信息需要通过自定义用户代码检索。

我正在尝试找到一种方法来执行此自定义代码。谷歌搜索对我没什么帮助。 Slf4j中有一个名为“BasicMDCAdapter”的辅助类。但我不知道如何使用它。我无法在任何地方找到示例代码。

This也是一个有用的代码,但仍然没有给出一些描述。

我感谢某位朋友的帮助。

谢谢。

1 个答案:

答案 0 :(得分:6)

根据您希望实现的目标,您可以完全避免自定义代码。

使用JUL到SLF4J Bridge

是一个可用的桥,它挂钩到java.util.Logging(JUL)并将所有日志事件转发到SLF4J。使用日志输出允许使用任何SLF4J日志记录实现(例如Logback或Log4j)来为两个日志记录API编写组合日志输出。

使用JUL到SLF4J Bridge,您可以免费获得任何支持它的SLF4J实现的MDC支持。

撰写JUL扩展

如果要保持日志记录系统分离,则需要编写一个JUL扩展,“读取”MDC并将其值输出到日志中。如果您查看SLF4J MDC类,它有一个访问其所有值的方法:org.slf4j.MDC.getCopyOfContextMap()

请记住,默认的JUL处理程序非常有限。因此,我认为你必须实现自己的,然后可以访问MDC。但是,您需要首先检查它们是否在同一个线程中调用。