首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >log4j2 Slf4j LoggerFactory.getILoggerFactory获取的记录器只能读取没有配置文件的默认log4j.xml

log4j2 Slf4j LoggerFactory.getILoggerFactory获取的记录器只能读取没有配置文件的默认log4j.xml
EN

Stack Overflow用户
提问于 2021-04-26 11:01:46
回答 2查看 101关注 0票数 0

在带有测试配置文件的SpringBoot项目中使用log4j2,

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

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

代码语言:javascript
复制
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")打印日志。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-29 10:23:41

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

票数 0
EN

Stack Overflow用户

发布于 2021-04-27 23:41:33

不,这不会是Log4j中的错误。Log4j对Spring profile一无所知,也不会将其包含在定位配置文件的逻辑中。

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

代码语言:javascript
复制
    public static Logger getLogger(String name) {
        ILoggerFactory iLoggerFactory = getILoggerFactory();
        return iLoggerFactory.getLogger(name);
    }

这与您在第二个调用中手动执行的操作完全相同,所以我看不出它们之间有什么区别。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67260315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档