log4j2由Slf4j LoggerFactory.getILoggerFactory获取的记录器只能读取没有配置文件



在SpringBoot项目中使用log4j2和测试配置文件

org.slf4j.LoggerFactory.getLogger("xxx")可以获取测试配置文件LoggerContext并从log4j2-test.xml读取配置文件。

但是

org.slf4j.LoggerFactory.getILoggerFactory().getLogger("xxx")只能获取当前LoggerContext并从log4j2.xml读取配置。

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

这是log4j2的错误吗?

我用Logback测试了LoggerFactory.getILoggerFactory().getLogger("xxx"),Logback可以正确选择log4j2-test.xml

SpringBoot版本:2.4.5

添加一些背景来帮助更多的人:ParSeq框架通过LoggerFactory.getILoggerFactory().getLogger("xxx")打印日志。

不,这不会是Log4j中的错误。Log4j对Spring概要文件一无所知,也没有将它们纳入其定位配置文件的逻辑中。

LoggerFactory中您正在调用的方法是静态的。这意味着它们是由SLF4J实现的。SLF4J源显示getLogger("XXX"(执行

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

这与你在第二次通话中手动进行的操作完全相同,所以我看不出它们之间有什么区别。

我还怀疑Logback是否能正确选择log4j2-test.xml,因为这对Logback来说是一个无效的配置文件。

这应该是log4j2的一个bug:JIRA_LOG4J2-3083

最新更新