log4j2?xml配置文件屏蔽第三方依賴包的日志方式
第三方日志
代碼如下,這個(gè)是一個(gè)最簡(jiǎn)單的,只打印日志到控制臺(tái)的配置,這里將用這個(gè)代碼來(lái)作為例子來(lái)解釋如何屏蔽掉第三方日志。
<?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>
<!-- 配置日志的根節(jié)點(diǎn),打印trace等級(jí)及其以上等級(jí)的日志 -->
<root level="trace">
<appender-ref ref="console_out_appender"/>
</root>
</Loggers>
</Configuration>
在用這個(gè)配置文件的時(shí)候,就會(huì)發(fā)現(xiàn)有大量的第三方日志充斥其中,導(dǎo)致像查找自己的日志非常的困難,效果如下所示
這個(gè)是第三方日志中的zookeeper的心跳機(jī)制日志,幾乎一秒鐘輸出一行,特別煩人
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
專門屏蔽某一個(gè)第三方日志
要想屏蔽這個(gè)日志,一個(gè)是直接提升日志的根節(jié)點(diǎn)的日志等級(jí)到info,這樣就看不到這些日志了,但是這樣也會(huì)掩蓋主自己的info已下的等級(jí)的日志。
但可以通過(guò)添加<logger>標(biāo)簽來(lái)專門屏蔽第三方日志,代碼如下所示。
<?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>
<!-- 配置日志的根節(jié)點(diǎn) -->
<root level="trace">
<appender-ref ref="console_out_appender"/>
</root>
<!-- 第三方日志系統(tǒng) -->
<logger name="org.apache.zookeeper" level="info"/>
</Loggers>
</Configuration>
這樣就可以通過(guò)info的等級(jí)來(lái)專門限制zookeeper的心跳機(jī)制日志了,同時(shí)不影響自己的日志等級(jí)。
但是亂輸出日志的東西還有很多,其中就包括spring框架,然后就可以通過(guò)添加logger的方式來(lái)屏蔽日志
批量屏蔽第三方日志
為了屏蔽第三方日志,不得不加了很多l(xiāng)ogger,而且還屏蔽不全,最主要的原因是不知道要屏蔽的logger的name屬性,只能從網(wǎng)上搜,結(jié)果如下,依然屏蔽不全。
<!-- 第三方日志系統(tǒng) --> <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"/>
怎么批量設(shè)置第三方日志,我試了用通配符'*',但是不管用,網(wǎng)上搜了半天,發(fā)現(xiàn)對(duì)logger節(jié)點(diǎn)下name屬性的描述只有一句話:name:用來(lái)指定該Logger所適用的類或者類所在的包全路徑,繼承自Root節(jié)點(diǎn)。
可能是我閱讀理解不行,看不懂。
最后查了https://stackoverflow.com/questions/44551571/log4j2-wildcard-logger-names和https://logging.apache.org/log4j/2.x/manual/api.html#Logger_Names,才明白,只要屏蔽掉了父級(jí)日志,就會(huì)自動(dòng)屏蔽子一級(jí)日志。
所以上面寫這么多東西都屏蔽不全的,改成下面一句話就可以了。
<!-- 第三方日志系統(tǒng) --> <logger name="org" level="info"/>
天哪,網(wǎng)上搜了好多人的答案,都是傻乎乎的一個(gè)一個(gè)的配置,看著真是讓人太絕望了。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MyBatis?實(shí)現(xiàn)多對(duì)多中間表插入數(shù)據(jù)
這篇文章主要介紹了MyBatis?實(shí)現(xiàn)多對(duì)多中間表插入數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Java實(shí)現(xiàn)自定義語(yǔ)言和表達(dá)式解析的解釋器模式
Java解釋器設(shè)計(jì)模式通過(guò)解析自定義語(yǔ)言和表達(dá)式,實(shí)現(xiàn)對(duì)復(fù)雜邏輯的處理,提高程序可擴(kuò)展性和靈活性。它將語(yǔ)法解析和執(zhí)行過(guò)程分離,通過(guò)抽象語(yǔ)法樹(shù)和解釋器實(shí)現(xiàn)對(duì)語(yǔ)言和表達(dá)式的解析和求值,避免了硬編碼和復(fù)雜的條件判斷,提高了程序的可讀性和可維護(hù)性2023-04-04
JAVA中使用FileWriter寫數(shù)據(jù)到文本文件步驟詳解
這篇文章主要介紹了JAVA中使用FileWriter寫數(shù)據(jù)到文本文件步驟詳解,FileWriter類提供了多種寫入字符的方法,包括寫入單個(gè)字符、寫入字符數(shù)組和寫入字符串等,它還提供了一些其他的方法,如刷新緩沖區(qū)、關(guān)閉文件等,需要的朋友可以參考下2023-10-10
基于Springboot2.3訪問(wèn)本地路徑下靜態(tài)資源的方法(解決報(bào)錯(cuò):Not allowed to load local
這篇文章主要介紹了基于Springboot2.3訪問(wèn)本地路徑下靜態(tài)資源的方法(解決報(bào)錯(cuò):Not allowed to load local resource),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
java部署項(xiàng)目流程幾種常見(jiàn)方式詳解
部署Java項(xiàng)目通常有幾種常見(jiàn)的方法,具體選擇哪種方法取決于項(xiàng)目需求、資源、團(tuán)隊(duì)習(xí)慣等因素,這篇文章主要介紹了java部署項(xiàng)目流程幾種常見(jiàn)方式,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-06-06
pagehelper插件顯示total為-1或1的問(wèn)題
這篇文章主要介紹了pagehelper插件顯示total為-1或1,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
Java中實(shí)現(xiàn)Map按值排序的多種方法
Java的Map接口默認(rèn)不保證元素的順序,本文介紹如何使用TreeMap、Collections.sort()結(jié)合Entry、Stream API以及Guava庫(kù)等技術(shù)手段實(shí)現(xiàn)Map按值排序,每種方法都有其特點(diǎn),在選擇具體方法時(shí)應(yīng)考慮項(xiàng)目的具體需求及個(gè)人偏好,需要的朋友可以參考下2025-03-03
MyBatis-Plus逆向工程——Generator的使用
這篇文章主要介紹了MyBatis-Plus逆向工程——Generator的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

