摘要:由日志打不出引出的知識圖譜一當我們調(diào)用的時候發(fā)生了什么目前業(yè)界日志標配當我們調(diào)用的的時候到底發(fā)生了什么貼一張執(zhí)行流程圖這里出現(xiàn)了一個關(guān)鍵對象如果的局部變量值為就調(diào)用父進行日志打印結(jié)合實際場景解釋一下上述是某個工程的的配置文件就是配置中
由日志打不出引出的知識圖譜(一)
目前業(yè)界日志標配slf4j + logback,當我們調(diào)用slf4j的Logger.error()的時候到底發(fā)生了什么?貼一張Logger執(zhí)行流程圖
這里出現(xiàn)了一個關(guān)鍵對象AppenderAttachableImpl,如果Logger的局部變量值為null,就調(diào)用父Logger進行日志打印,結(jié)合實際場景解釋一下
..... .....
上述是某個工程的logback.xml的配置文件,AppenderAttachableImpl就是配置中的appender元素節(jié)點的抽象,那么對如果Logger局部變量AppenderAttachableImpl為null,則調(diào)用父Logger,這里的父Logger就是代表ROOT節(jié)點的Logger實例
接下來關(guān)注另外一個問題Logger局部變量AppenderAttachableImpl什么才為null,來看下Logger的創(chuàng)建過程,根據(jù)Logger logger = LoggerFactory.getLogger("name");定位到類ch.qos.logback.classic.LoggerContext構(gòu)造方法
在構(gòu)造方法中創(chuàng)建了ROOT Logger實例,接下來看下實際創(chuàng)建Logger實例代碼
如果loggerCache存在對應(yīng)實例則直接返回,如果ROOT-Logger.getChildByName找不到對應(yīng)name的Logger,就創(chuàng)建一個Logger
這里可以看出創(chuàng)建的Logger實例的父Logger就是ROOT-Logger,但是在創(chuàng)建的時候并沒有涉及到AppenderAttachableImpl的賦值.接下來再探索一下,AppenderAttachableImpl的賦值過程(基于SpringBoot)
直接定位到初始化類ch.qos.logback.classic.joran.action.LoggerAction
ch.qos.logback.core.joran.action.AppenderRefAction
在解析logback.xml在解析到
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/68301.html
摘要:分布式架構(gòu)實踐負載均衡在網(wǎng)站創(chuàng)立初期,我們一般都使用單臺機器對臺提供集中式服務(wù),但是隨著業(yè)務(wù)量越來越大,無論是性能上還是穩(wěn)定性上都有了更大的挑戰(zhàn)。就鹿晗宣布戀情導(dǎo)致微博宕機事件淺談大型網(wǎng)站高可用性架構(gòu)中午吃飯刷著刷著微博發(fā)現(xiàn)微博突然掛了。 分布式架構(gòu)實踐——負載均衡 在網(wǎng)站創(chuàng)立初期,我們一般都使用單臺機器對臺提供集中式服務(wù),但是隨著業(yè)務(wù)量越來越大,無論是性能上還是穩(wěn)定性上都有了更大的挑...
閱讀 1121·2021-09-22 16:04
閱讀 1499·2019-08-30 15:43
閱讀 1109·2019-08-29 14:01
閱讀 3444·2019-08-26 12:19
閱讀 3359·2019-08-26 12:15
閱讀 1452·2019-08-26 12:13
閱讀 3270·2019-08-23 17:00
閱讀 1490·2019-08-23 15:38