Log4j2-24-log4j2 相同的日志打印 2 次
2016年5月21日大约 2 分钟
现象
相同的日志打印了两次,且因为日志的配置不同,导致脱敏的情况不一致。
代码与配置
代码
package com.ryo.log4j2.cfg.additivity;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class SimpleDemo {
private static final Logger logger = LogManager.getLogger(SimpleDemo.class.getName());
public static void main(String[] args) {
logger.info("do it");
}
}
log4j2.xml 配置文件
简化如下
${sys:user.home}/logs/log4j2/log4j2/
这里没有额外的 appender,就算有,所有的匹配的 additivity="false"
,应该也不会重复才对。
问题分析
发现项目配置比较奇怪,在启动的时候 jvm 指定了配置。
-Dlog4j.configurationFile=otherLog4j2.xml,log4j2.xml
相当于指定了两个配置文件。
otherLog4j2.xml
${sys:user.home}/logs/log4j2/log4j2/
日志效果
2 个都会打印。
2023-07-20 14:07:46,005 main WARN The bufferSize is set to 8192 but bufferedIo is false: false
OTHER 14:07:46.057 [main] INFO com.ryo.log4j2.cfg.additivity.SimpleDemo - do it
CURRENT 14:07:46.057 [main] INFO com.ryo.log4j2.cfg.additivity.SimpleDemo - do it
解决方式
直接把 jvm 启动时只保留一个 log4j2.xml 文件即可。
如果确实需要另外一个配置文件,可以考虑在 log4j2.xml 针对 logger 进行拦截重写日志隔离级别,避免重复打印。
精准匹配之后,就不会再往兜底执行了。两个都是兜底,就会执行多次。
参考资料
贡献者
binbin.hou