问题起源
日志框架用的log4j,接入阿里云Alibaba Cloud Log Log4j Appender做日志采集,以及错误预警。某天发现线上无法正常采集日志数据,怀疑是dubbo日志包冲突影响导致。报错信息:
1 | main DEBUG Using configurationFactory org.apache.logging.log4j.core.config.ConfigurationFactory$Factory@1153ee42 |
问题追溯
IDEA有个功能,可以查看maven项目依赖总览图。如图所示功能:
这样很方便就可以找到是哪个jar包包含的依赖有冲突。
去除了dubbo的log4j依赖,问题依然重现。再判断是否nacos导致的。查看nacos源码发现以下代码:
1 | public Log4J2NacosLogging() { |
nacos注册中心会查找nacos的日志配置文件,如果找不到怎么办呢,再下面代码:
1 | private String[] getCurrentlySupportedConfigLocations() { |
nacos会引用它默认的配置信息,导致之前项目的log4j配置失效。如何禁用nacos的默认配置,在它配置工厂类有写:
private boolean isDefaultConfigEnabled() {
String property = System.getProperty("nacos.logging.default.config.enabled");
return property == null || BooleanUtils.toBoolean(property);
}
我们只需要在系统变量中设置nacos.logging.default.config.enabled=false,然后把nacos的日志配置信息放到我们项目中的log4j文件中即可,在nacos-client源码中我们可以找到log4j以及logback的写法。