我使用 MDC 来帮助 log4j 记录更多信息。一切正常,直到我将 java 版本更新到 11。 这是我的 log4j 配置(伪代码)
log4j.appender.R.layout.ConversionPattern = [%-4p] %d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%X{request-id}] %l %m%n
这就是我为 MDC 所做的
MDC.put("request-id","example-request-id")
按照预期,应该记录请求 ID。但如果 Java 版本为 11,则不起作用。
以下是我从 log4j 代码中得到的结果。
“org.apache.log4j.helpers.Loader”中有一段代码设置java1
,
String prop = OptionConverter.getSystemProperty("java.version", null);
if(prop != null) {
int i = prop.indexOf('.');
if(i != -1) {
if(prop.charAt(i+1) != '1')
java1 = false;
}
}
然后,“org.apache.log4j.MDC#MDC”中的一些代码用于停止逻辑。
void put0(String key, Object o) {
if(java1 || tlm == null) {
return;
}
...
}
总之,如果 java 版本为 11,12,13,..., 11.1x, 12.1x,..., 等,MDC 将无法工作。这看起来不像是一个错误吗?
最佳答案
这是一个错误。但是,Log4j 自 2015 年 8 月 5 日起就被标记为生命周期终止 ( http://logging.apache.org/log4j/1.2/ ) 且
Users of Log4j 1 are recommended to upgrade to Apache Log4j 2
具体而言,MDC 和 Java 9 的问题是众所周知的:Log4j 1.2 is broken on Java 9 ,但不太可能有人会解决这个问题。
关于java - 如果 Java 版本为 11、11.1x 等,为什么 log4j 停止运行 MDC 逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69822992/