log4j2 slf4j loggerfactory.getiloggerfactory获取的记录器只能读取没有配置文件的默认log4j.xml

bmp9r5qi  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(539)

在带有测试配置文件的springboot项目中使用log4j2, org.slf4j.LoggerFactory.getLogger("") 可以获取测试配置文件loggercontext并从中读取配置 log4j2-test.xml .
但是 org.slf4j.LoggerFactory.getILoggerFactory().getLogger("") 只能从中获取当前loggercontext和读取配置 log4j2.xml .

LoggerFactory.getLogger("xxx"); // log4j2-test.xml
LoggerFactory.getILoggerFactory().getLogger("xxx"); // log4j2.xml

是log4j2的bug吗?
我测试过了 LoggerFactory.getILoggerFactory().getLogger("") 使用logback,logback可以选择 log4j2-test.xml 适当地。
springboot版本: 2.4.5

kx7yvsdv

kx7yvsdv1#

不,这不是log4j中的bug。log4j对spring配置文件一无所知,也没有将它们合并到其定位配置文件的逻辑中。
loggerfactory中调用的方法是静态的。这意味着它们是由slf4j实现的。slf4j源代码显示getlogger(“”)没有

public static Logger getLogger(String name) {
        ILoggerFactory iLoggerFactory = getILoggerFactory();
        return iLoggerFactory.getLogger(name);
    }

这与您在第二次通话中手动执行的操作完全相同,因此我看不出它们之间有什么区别。
我还怀疑logback是否能够正确选择log4j2-test.xml,因为这对于logback来说是一个无效的配置文件。

相关问题