第三方j(luò)ar中Logger配置不生效解決

最近在看nacos源碼,為了方便理解,在源碼中修改參數(shù)和日志參數(shù)
在看nacos client心跳源碼的時(shí)候,為了修改參數(shù)和增加日志,我將com.alibaba.nacos.client.naming.beat.BeatReactor源碼拷貝到了我自己的工程,因?yàn)槭褂玫膌ogback,那么我在xml配置代碼如下

   <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <root>
        <level value="offer"/>
        <!--<appender-ref ref="rootFile"/>-->
        <appender-ref ref="CONSOLE"/>
    </root>
    <logger name="com.alibaba.nacos" >
        <appender-ref ref="CONSOLE"/>
        <level value="INFO"/>
    </logger>

代碼執(zhí)行了,但是log打印的數(shù)據(jù)日志沒(méi)有輸出到控制臺(tái),


image.png

檢查了語(yǔ)法是正確的,很這時(shí)候找到com.alibaba.nacos.client.naming.beat.BeatReactor對(duì)應(yīng)的nacos-client-1.1.4.jar,看到j(luò)ar目錄下有個(gè)nacos-logback.xml配置文件


image.png

nacos-client-1.1.4.jar中定義了logger,將com.alibaba.nacos.client.naming寫入到文件中
找到對(duì)應(yīng)的日志文件


image.png

確實(shí)nacos-client-1.1.4.jar中的配置文件生效了,不過(guò)為啥我的工程文件中的
    <logger name="com.alibaba.nacos" >
        <appender-ref ref="CONSOLE"/>
        <level value="INFO"/>
    </logger>

不生效?

通過(guò)Debug發(fā)現(xiàn)ch.qos.logback.classic.Logger類中

public void callAppenders(ILoggingEvent event) {
       int writes = 0;
       for (Logger l = this; l != null; l = l.parent) {
           writes += l.appendLoopOnAppenders(event);
           if (!l.additive) {
               break;
           }
       }
       // No appenders in hierarchy
       if (writes == 0) {
           loggerContext.noAppenderDefinedWarning(this);
       }
   }

   private int appendLoopOnAppenders(ILoggingEvent event) {
       if (aai != null) {
           return aai.appendLoopOnAppenders(event);
       } else {
           return 0;
       }
   }
image.png

logger中會(huì)最長(zhǎng)路徑原則配置,當(dāng)com.alibaba.nacos.client.naming匹配到了的logger之后會(huì)立即結(jié)束循環(huán),所以<logger name="com.alibaba.nacos" >是不生效的,知道原理之后,在工程的配置文件中增加配置

    <logger name="com.alibaba.nacos.client.naming" level="${com.alibaba.nacos.naming.log.level:-info}"
            additivity="false">
        <appender-ref ref="CONSOLE"/>
        <level value="INFO"/>
    </logger>
image.png
image.png

結(jié)果符合預(yù)期

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容