摘要:由日志打不出引出的知識圖譜一當我們調用的時候發生了什么目前業界日志標配當我們調用的的時候到底發生了什么貼一張執行流程圖這里出現了一個關鍵對象如果的局部變量值為就調用父進行日志打印結合實際場景解釋一下上述是某個工程的的配置文件就是配置中
由日志打不出引出的知識圖譜(一)
目前業界日志標配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在解析到
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68301.html
閱讀 1117·2021-09-22 16:04
閱讀 1498·2019-08-30 15:43
閱讀 1107·2019-08-29 14:01
閱讀 3442·2019-08-26 12:19
閱讀 3357·2019-08-26 12:15
閱讀 1450·2019-08-26 12:13
閱讀 3268·2019-08-23 17:00
閱讀 1488·2019-08-23 15:38