【发布时间】:2013-01-16 12:49:40
【问题描述】:
我使用 slf4j 登录我的项目。我想使用 MDC 来记录用户 ID 参数。所以我检查了教程和文档,并制作了如下代码:
MDC.put("key", userId)
userId 实际上是一个字符串。
我使用我常用的 log4j xml 和附加器等属性。在那里添加 %X{key} 但没有任何反应。我根本看不到任何东西可以代替 %X{key} 但其他参数如 %-5p 或 %c 效果很好。
所以我用 debug 来观察 MDC.put() 方法中发生了什么,并发现在 MDC 的初始化中使用了:
MDCAdapter mdcAdapter;
mdcAdapter = StaticMDCBinder.SINGLETON.getMDCA();
IDEA 中的调试表明它具有“Log4jMDCAdapter”,就像 MDCAdapter 的实现之一。 但后来我看了一下StaticMDCBinder,有这样的代码:
public MDCAdapter getMDCA() {
return new NOPMDCAdapter();
}
那么 slf4j 怎么可能用适当的适配器初始化 MDC,例如 log4j ???我没明白。因为它总是使用 NOPMDCAdapter 它不能在 MDC 中存储任何东西,也不能在日志中显示它。我该如何解决它??
在类路径中我有:
- log4j-1.2.16.jar
- slf4j-api-1.6.1.jar
- slf4j-api-1.6.2.jar
- slf4j-jcl-1.6.2.jar
- slf4j-log4j12-1.6.2.jar
【问题讨论】: