log4j2 由 Slf4j LoggerFactory.getILoggerFactory 获取的记录器只能读取默认 log4j.xml 没有配置文件
log4j2 the logger get by Slf4j LoggerFactory.getILoggerFactory can only read default log4j.xml without profile
在带有测试配置文件的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的bug?
我用Logback测试LoggerFactory.getILoggerFactory().getLogger("xxx")
,Logback可以正确选择log4j2-test.xml
。
SpringBoot版本:2.4.5
添加一些背景信息以帮助更多人:ParSeq
框架通过 LoggerFactory.getILoggerFactory().getLogger("xxx")
打印日志。
不,这不是 Log4j 中的错误。 Log4j 对 Spring 配置文件一无所知,并且不会将它们纳入其定位配置文件的逻辑。
您调用的 LoggerFactory 中的方法是静态的。这意味着它们由 SLF4J 实现。 SLF4J source 表明 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
在带有测试配置文件的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的bug?
我用Logback测试LoggerFactory.getILoggerFactory().getLogger("xxx")
,Logback可以正确选择log4j2-test.xml
。
SpringBoot版本:2.4.5
添加一些背景信息以帮助更多人:ParSeq
框架通过 LoggerFactory.getILoggerFactory().getLogger("xxx")
打印日志。
不,这不是 Log4j 中的错误。 Log4j 对 Spring 配置文件一无所知,并且不会将它们纳入其定位配置文件的逻辑。
您调用的 LoggerFactory 中的方法是静态的。这意味着它们由 SLF4J 实现。 SLF4J source 表明 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