我使用Slf4j和java.util.Logging设置了一个日志机制。我有几个线程,所以我无法从日志中得到一个清晰的想法,因为它们是混合的。现在,我尝试使用MDC概念在日志文件中添加更多数据,以便它们更清晰。
问题是在Slf4j虽然它支持MDC java.util.Logging不。但是上面写着
如果底层框架不提供MDC,例如java.util。,那么SLF4J仍然会存储MDC数据,但是其中的信息需要由自定义用户代码检索。
我正试图找到一种方法来做这个自定义代码。谷歌对我帮助不大。在Slf4j中有一个名为"BasicMDCAdapter"的助手类。但我不知道怎么用。我找不到一个示例代码。
这也是一个代码来帮助解决这个问题,但仍然没有给出一点描述。
我很感激这里有人的帮助。
谢谢。
根据您想要实现的目标,您可能完全可以避免自定义代码。
使用JUL到SLF4J桥
是一个连接java.util.Logging (JUL)并将所有日志事件转发给SLF4J的可用桥接。使用日志输出允许使用任何SLF4J日志记录实现(如Logback或Log4j)为两个日志api编写合并的日志输出。
使用JUL到SLF4J桥接,您将获得MDC免费支持,任何SLF4J实现都支持它。
写一个JUL扩展
如果你想保持日志系统的分离,那么你需要写一个JUL扩展,它"读取"MDC并将其值输出到日志中。如果您查看SLF4J MDC类,它有一个访问其所有值的方法:org.slf4j.MDC.getCopyOfContextMap()
.
请记住,默认的JUL处理程序非常有限。因此,我认为您必须实现自己的程序,然后才能访问MDC。但是,您需要首先检查它们是从同一线程内调用的。