本篇主题是:logback 日志不生效 bug,怎么验证是否生效?
深刻体会到,bug 都是很恶心的,需要大量时间去排除。但有时候一个 bug 会触发你的学习,然后不仅解决了还能学到更多东西,这就是 bug 另外的一面。
话不多说,下面进入本篇内容
一、必要知识点
logback 在启动的时候,会按照下面的顺序加载配置文件
- 在 classpath 中查找 logback.groovy 文件
- 在 classpath 中查找 logback-test.xml 文件
- 在 classpath 中查找 logback.xml 文件
首先必须知道,logback 在 classpath 目录下,它会自动加载(logback 日志命名符合下面规则加载顺序即可),下面都是生效的
1、application 和 logback.xml 都在 classpath 目录下
2、application 在 config 下,logback.xml 在 classpath 目录下
二、怎么验证 logback 是否生效
设置 debug=“true”,这样控制台可以看到日志
<configuration debug="true" >
...
</configuration>
启动可以看到
三、失效情况 1
因为启动 application 配置文件和 logback 文件不在同一目录,失效。
解决方案,将配置文件移进 config 目录下,和 logback 在同一目录下并配置 logging: config: classpath:config/logback.xml 即可
四、失效情况 2
不符合默认加载的命名(不符合 logback.groovy、logback.xml、logback-test.xml)
比如 logback-dev.xml 失效
如果确实想按照自己的需求命名
比如每个环境下都不一样,dev/sit/prod 等,那么可以通过 logback.xml 中配置 logback-xx.xml 去加载你需要的环境的 logback-xx.xml,如下
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="logback-${spring.profiles.active}.xml"/>
</configuration>
那么只要配置好环境启动即可
结果(最后还是加载了 logback-dev.xml)
五、失效情况 3
有其他的 logback 提前生效了,这个只能自己排除,可能你其他容器中已经自带了,可以去 target/classes 里面看是否
下面是 logback-test.xml 生效了,导致 logback.xml 失效,这个是加载顺序问题导致,上面已经说了加载顺序。
本文结束!