logback配置文件重新加载VS业务写日志丢失

ε祈祈猫儿з 提交于 2020-01-07 01:19:46

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

首先,普通的一个XML文件解析的路线如下所示:

 

让我们加上scan的配置如下:

 

<configuration  packagingData="false"  scan="true" scanPeriod="1 seconds">

 

这个时候会生成一个定时任务,具体任务的执行见:

 

stop in ch.qos.logback.classic.joran.ReconfigureOnChangeTask.performXMLConfiguration

这个任务里面会做什么事情吗?

我们知道有一个全局root的Logger对象,会触发这个对象的一些行为:

跟进去看看会发生什么!

 

 

 

通过设置如下断点&执行顺序可以复现:

断点在
stop at  ch.qos.logback.core.spi.AppenderAttachableImpl:50 --- 这是为了获取主线程
stop at  ch.qos.logback.core.spi.AppenderAttachableImpl:51

stop at  ch.qos.logback.core.joran.spi.ConfigurationWatchList:83

stop at ch.qos.logback.core.spi.AppenderAttachableImpl:109
执行run

到达断点 stop at  ch.qos.logback.core.spi.AppenderAttachableImpl:50  找到主线程号,suspend 主线程号,然后执行cont

到达断点 ch.qos.logback.core.joran.spi.ConfigurationWatchList:83   然后修改配置文件,保存, 执行cont

到达断点ch.qos.logback.core.spi.AppenderAttachableImpl:109   执行next,清空appenderList列表,suspend 当前线程号 

resume main线程号,再执行cont
到达断点ch.qos.logback.core.spi.AppenderAttachableImpl:51
继续执行,就可以发生下面的事情!

结果就是这条日志没有写进去!!!日志丢失!

官方bug - https://jira.qos.ch/browse/LOGBACK-1495

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!