【问题标题】:MDC(Mapped Diagnostic Context) support for JUL(Java.util.Logging)JUL(Java.util.Logging)的 MDC(映射诊断上下文)支持
【发布时间】:2013-05-24 14:17:01
【问题描述】:

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

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

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

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

This 也是一个帮助解决这个问题的代码,但仍然没有给出任何描述。

感谢这里有人的帮助。

谢谢。

【问题讨论】:

  • 我不想给出“尝试其他东西”的答案,但是……你试过使用 logback 吗?它是专门为支持 slf4j 而构建的记录器,并且支持 mdc。 <dependency><br/> <groupId>ch.qos.logback</groupId><br/> <artifactId>logback-classic</artifactId><br/> <version>0.9.30</version><br/> </dependency><br/> <dependency><br/> <groupId>ch.qos.logback</groupId><br/> <artifactId>logback-core</artifactId><br/> <version>0.9.30</version><br/> </dependency>

标签: java slf4j java.util.logging mdc


【解决方案1】:

根据您想要实现的目标,您可能完全可以避免使用自定义代码。

使用 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。但是,您需要首先检查它们是否是从同一线程中调用的。

【讨论】:

    猜你喜欢
    • 2015-07-17
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    相关资源
    最近更新 更多