9

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

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

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

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

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

我很感激这里有人的帮助。

谢谢你。

4

1 回答 1

10

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

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

于 2013-06-08T07:29:02.147 回答