java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > log4j2 xml配置文件屏蔽第三方依赖包的日志

log4j2 xml配置文件屏蔽第三方依赖包的日志方式

作者:苦荞米

这篇文章主要介绍了log4j2 xml配置文件屏蔽第三方依赖包的日志方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

第三方日志

代码如下,这个是一个最简单的,只打印日志到控制台的配置,这里将用这个代码来作为例子来解释如何屏蔽掉第三方日志。

<?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-nameshttps://logging.apache.org/log4j/2.x/manual/api.html#Logger_Names,才明白,只要屏蔽掉了父级日志,就会自动屏蔽子一级日志。

所以上面写这么多东西都屏蔽不全的,改成下面一句话就可以了。

<!-- 第三方日志系统 -->
<logger name="org" level="info"/>

天哪,网上搜了好多人的答案,都是傻乎乎的一个一个的配置,看着真是让人太绝望了。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文