大家好,我是神韵,是一个技术&生活博主。出文章目的主要是两个,一是好记忆不如烂笔头,记录总结中提高自己。二是希望我的文章可以帮到大家。欢迎来点赞打卡,你们的行动将是我无限的动力。
本篇主题是:logback日志不生效bug,怎么验证是否生效?

深刻体会到,bug都是很恶心的,需要大量时间去排除。但有时候一个bug会触发你的学习,然后不仅解决了还能学到更多东西,这就是bug另外的一面。

话不多说,下面进入本篇内容

一、必要知识点

logback在启动的时候,会按照下面的顺序加载配置文件

  1. 在classpath中查找 logback.groovy 文件
  2. 在classpath中查找 logback-test.xml 文件
  3. 在classpath中查找 logback.xml 文件

首先必须知道,logback在classpath目录下,它会自动加载(logback日志命名符合下面规则加载顺序即可),下面都是生效的

1、application和logback.xml都在classpath目录下

java logback 有内存泄漏的风险吗 logback bug_logback


2、application在config下,logback.xml在classpath目录下

java logback 有内存泄漏的风险吗 logback bug_配置文件_02

二、怎么验证logback是否生效

设置debug=“true”,这样控制台可以看到日志

<configuration debug="true" >
...
</configuration>

启动可以看到

java logback 有内存泄漏的风险吗 logback bug_加载_03

三、失效情况1

java logback 有内存泄漏的风险吗 logback bug_xml_04


因为启动application配置文件和logback文件不在同一目录,失效。

解决方案,将配置文件移进config目录下,和logback在同一目录下并配置logging: config: classpath:config/logback.xml即可

java logback 有内存泄漏的风险吗 logback bug_加载_05

四、失效情况2

不符合默认加载的命名(不符合logback.groovy、logback.xml、logback-test.xml)

比如logback-dev.xml失效

java logback 有内存泄漏的风险吗 logback bug_加载_06

如果确实想按照自己的需求命名
比如每个环境下都不一样,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>

java logback 有内存泄漏的风险吗 logback bug_logback_07


那么只要配置好环境启动即可

java logback 有内存泄漏的风险吗 logback bug_logback_08


结果(最后还是加载了logback-dev.xml)

java logback 有内存泄漏的风险吗 logback bug_加载_09

五、失效情况3

有其他的logback提前生效了,这个只能自己排除,可能你其他容器中已经自带了,可以去target/classes里面看是否

下面是logback-test.xml生效了,导致logback.xml失效,这个是加载顺序问题导致,上面已经说了加载顺序。

java logback 有内存泄漏的风险吗 logback bug_加载_10

本文结束!