一次springboot日志不生效问题深入分析

本文深入分析了SpringBoot日志不生效的问题,主要原因是配置变动导致日志读取失败。在启动过程中,LoggingSystem根据logback、log4j、javaLog的优先级选择日志实现。当logging.config配置在bootstrap中未被处理时,将无法按预期配置日志,导致日志不打印。解决方案是确保logging.config配置正确,并在正确的位置被加载。

springboot日志不生效问题深入分析

auth by:yangs , at 2022-09-22

现象

在一次环境排查问题中,发现某系统日志不打印。通过各种排查,总结后引起原因为配置这块后面改动比较多,有配置移动,打包脚本优化涉及关联改动。导致错误配置引起日志读取失败。无法到达预期配置的效果。

深入分析

在LoggingApplicationListener进行日志系统处理。
在启动初期LoggingSystem会根据引入包判断引用哪种日志实现。按照logback,log4j,javaLog的优先级顺序,判断类是否加载决定日志具体实现。
LoggingSystem初始化
判断是否引入对应的jar
LoggingSystem决定日志具体实现方式
接着进入环境配置处理。
在bootstrap处理里面可以看到,而恰好修改过后的配置logging.config放这个文件里面。
加载bootstrap
在这里插入图片描述
这里未启动bootstrap.enable,不会后续处理。故拿不到bootstrap里面的logging.config配置。
接着初始化后面的配置。解析application相关配置。

在配置处理完后,在LoggingApplicatoinListener会去读取日志相关配置。实现日志的各种细节。
在这个监听器里面会监听evironment准备好的事件。然后去初始化logSystem
在这里插入图片描述
跟进到initialIzeSystem。拿取日志配置logging.config
在这里插入图片描述
在AbstractLoggingSystem中,开始加载日志。可以看到,根据是否配置logging.config进行选择加载指定配置或则是程序自适应加载默认配置。
在这里插入图片描述
这里会进入Log4j的实现类进行后续处理。因为前面已经决定了日志实现。

没有获取logging.config的情况。进入initializeWithConvertions
在这里插入图片描述
尝试获取默认文件配置,可以看到程序会尝试去读取各种默认命名,以及yml,yaml,json等等格式。
默认名称包括debug如下,还会尝试读取文件名带-spring的日志配置。
在这里插入图片描述
因为项目中配置的日志配置文件名都是自定义的。
所以在都没有读取到默认配置后,框架最终尝试读去springboot包下的配置。
在这里插入图片描述
在这里插入图片描述
这个配置也是和我们在控制台上看到的打印格式一致。

总结

一些应用级的配置放在application里面是最佳实践。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ytadpole

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值