我有一个使用Slf4j和java.util.Logging设置的日志记录机制。我有几个线程,所以我无法从日志中得到一个清晰的想法,因为它们是混合的。现在我尝试使用MDC概念在日志文件中添加更多数据,以便它们清晰。
问题与Slf4j中的问题相同,尽管它支持MDC java.util.Logging不支持。但它说
如果底层框架不提供MDC,例如java.util.logging,那么SLF4J仍将存储MDC数据,但其中的信息需要通过自定义用户代码检索。
我正在尝试找到一种方法来执行此自定义代码。谷歌搜索对我没什么帮助。 Slf4j中有一个名为“BasicMDCAdapter”的辅助类。但我不知道如何使用它。我无法在任何地方找到示例代码。
This也是一个有用的代码,但仍然没有给出一些描述。
我感谢某位朋友的帮助。
谢谢。
答案 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。但是,您需要首先检查它们是否在同一个线程中调用。