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"/>