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"/>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章