Why log4j stop running MDC logic if Java version is 11, 11.1x, etc(如果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,但是不太可能有人能够解决这个问题。
这篇关于如果Java版本是11、11.1x等,为什么log4j停止运行MDC逻辑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如果Java版本是11、11.1x等,为什么log4j停止运行MDC逻辑
基础教程推荐
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01