log4j2 xml 配置文件 屏蔽 第三方 依賴包 的日誌

log4j2 xml 配置文件 屏蔽 第三方 依賴包 的日誌_苦蕎米的博客-CSDN博客

第三方日誌

代碼如下,這個是一個最簡單的,只打印日誌到控制檯的配置,這裏將用這個代碼來作爲例子來解釋如何屏蔽掉第三方日誌。

<?xml version="1.0" encoding="UTF-8" ?>

<Configuration status="WARN" monitorInterval="600">
    <Appenders>
        <Console name="console_out_appender" target="SYSTEM_OUT">
            <!-- 輸出日誌的格式 -->
            <PatternLayout pattern="%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <!-- 配置日誌的根節點,打印trace等級及其以上等級的日誌 -->
        <root level="trace">
            <appender-ref ref="console_out_appender"/>
        </root>
    </Loggers>
</Configuration>

在用這個配置文件的時候,就會發現有大量的第三方日誌充斥其中,導致像查找自己的日誌非常的困難,效果如下所示,這個是第三方日誌中的zookeeper的心跳機制日誌,幾乎一秒鐘輸出一行,特別煩人。

DEBUG [RMI TCP Connection(192.168.9.5:2181)] 2021-07-21 10:46:30 (ClientCnxn.java:717) Got ping response for sessionid: 0x17a18cc4d2b4155 after 48ms
DEBUG [RMI TCP Connection(192.168.9.5:2181)] 2021-07-21 10:46:31 (ClientCnxn.java:717) Got ping response for sessionid: 0x17a18cc4d2b4155 after 9ms
DEBUG [RMI TCP Connection(192.168.9.5:2181)] 2021-07-21 10:46:32 (ClientCnxn.java:717) Got ping response for sessionid: 0x17a18cc4d2b4155 after 4ms
DEBUG [RMI TCP Connection(192.168.9.5:2181)] 2021-07-21 10:46:34 (ClientCnxn.java:717) Got ping response for sessionid: 0x17a18cc4d2b4155 after 7ms
DEBUG [RMI TCP Connection(192.168.9.5:2181)] 2021-07-21 10:46:35 (ClientCnxn.java:717) Got ping response for sessionid: 0x17a18cc4d2b4155 after 6ms
DEBUG [RMI TCP Connection(192.168.9.5:2181)] 2021-07-21 10:46:36 (ClientCnxn.java:717) Got ping response for sessionid: 0x17a18cc4d2b4155 after 24ms
DEBUG [RMI TCP Connection(192.168.9.5:2181)] 2021-07-21 10:46:38 (ClientCnxn.java:717) Got ping response for sessionid: 0x17a18cc4d2b4155 after 11ms

專門屏蔽某一個第三方日誌

要想屏蔽這個日誌,一個是直接提升日誌的根節點的日誌等級到info,這樣就看不到這些日誌了,但是這樣也會掩蓋主自己的info已下的等級的日誌。但可以通過添加<logger>標籤來專門屏蔽第三方日誌,代碼如下所示。

<?xml version="1.0" encoding="UTF-8" ?>

<Configuration status="WARN" monitorInterval="600">
    <Appenders>
        <Console name="console_out_appender" target="SYSTEM_OUT">
            <!-- 輸出日誌的格式 -->
            <PatternLayout pattern="%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <!-- 配置日誌的根節點 -->
        <root level="trace">
            <appender-ref ref="console_out_appender"/>
        </root>
        <!-- 第三方日誌系統 -->
        <logger name="org.apache.zookeeper" level="info"/>
    </Loggers>
</Configuration>

這樣就可以通過info的等級來專門限制zookeeper的心跳機制日誌了,同時不影響自己的日誌等級。但是亂輸出日誌的東西還有很多,其中就包括spring框架,然後就可以通過添加logger的方式來屏蔽日誌

批量屏蔽第三方日誌

爲了屏蔽第三方日誌,不得不加了很多logger,而且還屏蔽不全,最主要的原因是不知道要屏蔽的logger的name屬性,只能從網上搜,結果如下,依然屏蔽不全。

<!-- 第三方日誌系統 -->
<logger name="org.springframework.core" level="info"/>
<logger name="org.springframework.beans" level="info"/>
<logger name="org.springframework.context" level="info"/>
<logger name="org.springframework.web" level="info"/>
<logger name="org.jboss.netty" level="info"/>
<logger name="org.apache.http" level="info"/>
<logger name="org.apache.zookeeper" level="info"/>
<logger name="org.apache.maven.plugins" level="info"/>

怎麼批量設置第三方日誌,我試了用通配符'*',但是不管用,網上搜了半天,發現對logger節點下name屬性的描述只有一句話:name:用來指定該Logger所適用的類或者類所在的包全路徑,繼承自Root節點。可能是我閱讀理解不行,看不懂。
最後查了https://stackoverflow.com/questions/44551571/log4j2-wildcard-logger-names和https://logging.apache.org/log4j/2.x/manual/api.html#Logger_Names,才明白,只要屏蔽掉了父級日誌,就會自動屏蔽子一級日誌。
所以上面寫這麼多東西都屏蔽不全的,改成下面一句話就可以了。

<!-- 第三方日誌系統 -->
<logger name="org" level="info"/>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章