springboot中日志配置xml文件是如何加载的?

发布于 2022-09-12 23:06:54 字数 267 浏览 26 评论 0

在Spring项目中,如果使用logback日志,首先在classpath:文件下配置logback.xml文件。按照我的理解 Logback日志会自动搜索并加载logback.xml , 可是在springboot中如果配置文件名为logback-spring.xml也能生效,SpringBoot是对Lockback进行什么操作了么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

巨坚强 2022-09-19 23:06:54

如果仅仅是想看SpringBootLogback到底做了啥,但是又不知道从哪里看起走(也就是找不到源码地方),那这里推荐一个方法:将错就错法(自己瞎编的名字,哈哈哈)

因为我们配置一个正常的SpringBoot+logback-spring.xml是非常简单,而且肯定可以正常跑起来,所以此时,我们只需要把logback-spring.xml配置错,搞坏掉,那么SpringBoot处理的时候肯定会出错咯,这样咱们有了堆栈,不就可以慢慢顺藤摸瓜了嘛

说干就干,找一个logback-spring.xml配置文件,随便在它里面加一个1,总之破坏掉xml文件格式即可
image.png

直接跑起来,果然报了一串错,从画白线开始,包名带了logging,说明啊入口就在这里了LoggingApplicationListener
image.png

其实顺着这些代码大体一看,还是Spring常干的那些事嘛,就是业务的再抽象,这样它粘合剂的效果才得以真正展现啊,所以日志系统,它就抽象出了一个LoggingSystem,这是一个抽象类,Logback的实现就是LogbackLoggingSystemLog4j2的实现叫Log4J2LoggingSystem等,整个初始化过程,其实就是LogbackLoggingSystem的初始化,而LogbackLoggingSystem再把Logback包一下,所以也会初始化Logbackch.qos.logback.classic.LoggerContext

因此看下来,如果要去找为啥logback-spring.xmlSpringBoot为啥会生效,那我们只用去看LogbackLoggingSystem如何初始化的即可,结合最开始我们将错就错的报错堆栈里报错点,因为我们是把xml里弄错而得到的堆栈,最后报错的地方是LogbackLoggingSystem.loadConfiguration,而此时肯定是已经找到了logback-spring.xml文件并加载了,所以我们起码也要回到这个方法的上一层开始找,也就是AbstractLoggingSystem.initializeWithConventions

断点一打,一眼就清楚了,这里的config有两处赋值
image.png

而源码进去一看,无论是getSelfInitializationConfig()还是getSpringInitializationConfig(),他们的来源都是LogbackLoggingSystem.getStandardConfigLocations

image.png

唯一区别就是

  • getSelfInitializationConfig()直接使用LogbackLoggingSystem.getStandardConfigLocations的值,就是找"logback-test.groovy", "logback-test.xml", "logback.groovy", "logback.xml"这些文件
  • getSpringInitializationConfig()是要在LogbackLoggingSystem.getStandardConfigLocations的值的基础上,加一个-spring文件名后缀,也就是"logback-test-spring.groovy", "logback-test-spring.xml", "logback-spring.groovy", "logback-spring.xml"
    image.png

差不多就是这样的吧,以上的思路仅供参考

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文