springboot2项目logback日志配置不生效解决
问题描述
springboot2.7.8项目,引入了spring-boot-starter-logging依赖,配置文件中有logback-spring.xml,在logback-spring.xml中指定了日志目录,项目正常启动,控制台日志也正常输出,但logback-spring.xml中指定的日志文件未生成。
思考过程
第一时间想到的是Jar包冲突
- 有了想法就要证明自己的猜测,于是在日志文件里发现线索。
- 反复👀️ 看了几分钟,还是没有看到类似日志冲突的文件(排除了jar包冲突的可能性)。
- 出现日志jar包冲突的情况,可以在控制台看到类似日志:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/m2repo/ch/qos/logback/logback-classic/1.2.12/logback-classic-1.2.12.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/m2repo/org/slf4j/slf4j-reload4j/1.7.36/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
换个角度解决问题
不能找到错误就想办法证明自己做的是对的。
新建空白项目,引入springboot + logback相关的最小依赖,把相同的配置拷贝过来,运行项目发现logback日志正常输出。有点信心了,证明项目本身的配置应该是正确的,问题出在引入的依赖,要解决问题大不了做加法把一个一个依赖加进来。
想到logback-spring.xml的优先级比较低,重命名logback.xml后重新运行发现logback日志配置生效了😄 。
把查jar包真的发现某个公司封装的jar包带了logback.xml配置文件,导致项目中的logback-spring.xml配置没有生效,同一个配置文件classpath的优先级比jar包里的更高。
logback日志文件加载优先级
logback优先加载自身的配置文件,加载顺序:
"logback-test.groovy", "logback-test.xml", "logback.groovy", "logback.xml"
/**
* 定义在org.springframework.boot.logging.logback.LogbackLoggingSystem文件
*/
@Override
protected String[] getStandardConfigLocations() {
return new String[] { "logback-test.groovy", "logback-test.xml", "logback.groovy", "logback.xml" };
}
未找到的情况加载spring特性(支持profile)的配置文件,顺序同上面一致文件名后带-spring
当然实际spring日志系统比这个要复杂很多,有时间再补全。
💬 评论 (0)
分享你的想法和见解
请 后发表评论
还没有评论,快来发表第一条评论吧!