背景:工程中同时存在log4j.xml&log4j2.xml
maven依赖如下:
此时工程实际使用的日志文件为log4j.xml
1、当同时设置log4j和log4j2的桥接依赖时
maven依赖如下:
此时启动会有警告日志:
点击告警日志链接:https://www.slf4j.org/codes.html#multiple_bindings
由文章得知具体加载哪个log4j/log4j2文件是由jvm随机决定的。
工程桥接依赖顺序如下:
经验证 jvm会选择上方桥接依赖与slf4j绑定,具体可参见启动日志(或断点源码):
log4j与log4j2都包含Log4jLoggerFactory对象,因此我们可通过包路径确认加载何bean。
(为何这么加载,暂且留个疑问,等下回再去剖析,感觉略深)
至此,我们便弄明白当工程必须存在两个log4j配置文件时,文件的加载情况如何。
另发现,工程日志路径打印异常问题,表现为打印日志路径及文件名称异常,后详细排查了target目录,发现是由于配置文件中占位符未替换导致的,由于工程基于profile,因此我们通过修改pom文件中对应profile的build情况便可解决。
新增上图红框中文件配置即可。
经验证,问题至此已全部解决。