在带有测试配置文件的SpringBoot项目中使用log4j2,
org.slf4j.LoggerFactory.getLogger("xxx")可以获取测试配置文件LoggerContext并从log4j2-test.xml读取配置。
但
org.slf4j.LoggerFactory.getILoggerFactory().getLogger("xxx")只能从log4j2.xml获取当前LoggerContext和读取配置。
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")打印日志。
发布于 2021-04-29 10:23:41
这应该是log4j2的一个错误:JIRA_LOG4J2-3083
发布于 2021-04-27 23:41:33
不,这不会是Log4j中的错误。Log4j对Spring profile一无所知,也不会将其包含在定位配置文件的逻辑中。
您正在调用的LoggerFactory中的方法是静态的。这意味着它们是由SLF4J实现的。SLF4J source显示getLogger("XXX")可以
public static Logger getLogger(String name) {
ILoggerFactory iLoggerFactory = getILoggerFactory();
return iLoggerFactory.getLogger(name);
}这与您在第二个调用中手动执行的操作完全相同,所以我看不出它们之间有什么区别。
我还怀疑Logback能否正确选择log4j2-test.xml,因为这将是Logback的无效配置文件。
https://stackoverflow.com/questions/67260315
复制相似问题