logback配置文件不生效问题的解决和思考

logback配置文件不生效问题

今天在做测试环境部署的时候,因为新版本上线需要做安全测试,所以需要应用生成一种特定的日志文件,这个时候就需要配置logback配置文件,因为应用的底层框架是使用已经封装好的框架,对logback的配置也是有默认的配置文件,名称是logback-spring.xml,此时修改好本地环境需要的日志格式,运行之后能够生成我们想要的日志目录和对应下的日志文件。
此时将修改好的日志配置文件上传到测试环境,发现测试环境死活没有我们想要的目标日志输出,但是其他的日志就可以正常输出,在测试环境搜寻许久,发现测试环境的web容器有一个logback.xml。而且对照了日志格式,貌似正常输出的日志就是根据这个loback.xml输出的。但是为什么我自己配置了logback的配置在classpath下,却没有采用我自己的,而是使用了另外这个配置文件。于是开始在找答案之旅,看看logback的一些东西,最后找到了。

logback 在启动时,根据以下步骤寻找配置文件:
1⃣️在 classpath 中寻找 logback-test.xml文件
2⃣️如果找不到 logback-test.xml,则在 classpath 中寻找 logback.groovy 文件
3⃣️如果找不到 logback.groovy,则在 classpath 中寻找 logback.xml文件
4⃣️如果上述的文件都找不到,则 logback 会使用 JDK 的 SPI 机制查找 META-INF/services/ch.qos.logback.classic.spi.Configurator 中的 logback 配置实现类,这个实现类必须实现 Configuration 接口,使用它的实现来进行配置
5⃣️如果上述操作都不成功,logback 就会使用它自带的 BasicConfigurator 来配置,并将日志输出到 console
(上述内容引用自:作者:beanlam 链接:https://www.jianshu.com/p/1ded57f6c4e3)

根据上面的描述,我们可以知道,logback就先找logback-test.xml,然后找logback.groovy,接下来找logback.xml。而我这边配置的logback的名称是logback-spring.xml,所以logback会先找到logback.xml,也就先加载了这个配置文件,导致我们的配置失效,至此,结束了一个小时的找bug之旅。

小结
其实这个问题也许有的朋友一眼就能解决,因为同时存在两个logback的配置文件这种情况,很少发生,之所以我自己没有思考到重复性的问题的愿意是,测试环境的web容器里面还有很多冗余的配置,但是这些配置都没有对我的引用造成干扰,所以麻痹了我自己,从而没有往这个方向上考虑,以后要注意这些问题。

很久没有来了,有时候想写,但是懒不愿意动,后面有个想法就是把自己在测试或者生产过程中遇到的问题,定位问题的经过和思考都用简单的文字写下来,记录一下自己踩过的坑,感觉还是很有意义的。向上吧少年。

你可能感兴趣的:(踩坑日记)