如果Java版本是11、11.1x等,为什么log4j停止运行MDC逻辑
我使用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/)和
起标记为停产建议Log4j 1的用户升级到Apache Log4j 2
具体地说,MDC和Java 9的问题是众所周知的:Log4j 1.2 is broken on Java 9,但是不太可能有人能够解决这个问题。
相关文章