摘要:由日志打不出引出的知识图谱一当我们调用的时候发生了什么目前业界日志标配当我们调用的的时候到底发生了什么贴一张执行流程图这里出现了一个关键对象如果的局部变量值为就调用父进行日志打印结合实际场景解释一下上述是某个工程的的配置文件就是配置中
由日志打不出引出的知识图谱(一)
目前业界日志标配slf4j + logback,当我们调用slf4j的Logger.error()的时候到底发生了什么?贴一张Logger执行流程图
这里出现了一个关键对象AppenderAttachableImpl,如果Logger的局部变量值为null,就调用父Logger进行日志打印,结合实际场景解释一下
..... .....
上述是某个工程的logback.xml的配置文件,AppenderAttachableImpl就是配置中的appender元素节点的抽象,那么对如果Logger局部变量AppenderAttachableImpl为null,则调用父Logger,这里的父Logger就是代表ROOT节点的Logger实例
接下来关注另外一个问题Logger局部变量AppenderAttachableImpl什么才为null,来看下Logger的创建过程,根据Logger logger = LoggerFactory.getLogger("name");定位到类ch.qos.logback.classic.LoggerContext构造方法
在构造方法中创建了ROOT Logger实例,接下来看下实际创建Logger实例代码
如果loggerCache存在对应实例则直接返回,如果ROOT-Logger.getChildByName找不到对应name的Logger,就创建一个Logger
这里可以看出创建的Logger实例的父Logger就是ROOT-Logger,但是在创建的时候并没有涉及到AppenderAttachableImpl的赋值.接下来再探索一下,AppenderAttachableImpl的赋值过程(基于SpringBoot)
直接定位到初始化类ch.qos.logback.classic.joran.action.LoggerAction
ch.qos.logback.core.joran.action.AppenderRefAction
在解析logback.xml在解析到
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/68301.html
阅读 1111·2021-09-22 16:04
阅读 1494·2019-08-30 15:43
阅读 1098·2019-08-29 14:01
阅读 3438·2019-08-26 12:19
阅读 3353·2019-08-26 12:15
阅读 1444·2019-08-26 12:13
阅读 3264·2019-08-23 17:00
阅读 1484·2019-08-23 15:38