【推荐】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
来源:oschina
链接:https://my.oschina.net/qiangzigege/blog/3153889