zoukankan      html  css  js  c++  java
  • log4j2 日志打两遍的问题

    在使用log4j2的时候,一般都需要不同的日志分类打印不同的日志等级,如下面的配置

    <!-- 用于指定log4j自动重新配置的监测间隔时间,单位是秒 -->
    <configuration debug="off" monitorInterval="10">
        <Properties>
            <Property name="log-path">server_logs</Property>
        </Properties>
        <Appenders>
            <Console name="console" target="SYSTEM_OUT">
                
                <PatternLayout
                    pattern="%d{yyyy-MM-dd HH:mm:ss} %t-%T %-5level %class{36} - %msg%xEx%n" />
            </Console>
        </Appenders>
        <Loggers>
            <logger name = "com.mygame" level="debug">
                <appender-ref ref="console" />
            </logger>
            <root level="error">
                <appender-ref ref="console" />
            </root>
        </Loggers>
    </configuration>

    这个配置的目标是,没有指定logger的时候,日志输出使用root,而root的级别是error,希望com.mygame包下面的日志输出debug级别。但是这样运行之后,发现日志输出了两遍,我是在从消息队列中接收消息之后打印的日志,害得我以为一个消息被处理了两次。

    这种情况是log4j2的机制问题,在Log4j2中,logger是有继承关系的,root是根节点,而上面配置中添加的logger就是root的子节点,在log4j2中,有个additivity的属性,它是子Logger 是否继承 父Logger 的 输出源(appender) 的标志位。具体说,默认情况下子Logger会继承父Logger的appender,也就是说子Logger会在父Logger的appender里输出。若是additivity设为false,则子Logger只会在自己的appender里输出,而不会在父Logger的appender里输出。由于上面的配置com.mygame的logger和root都输出到console中了,所以会显示输出了两条日志。

    要打破这种传递性,也非常简单,在logger中添加 additivity = "false",如下所示:

    <Loggers>
            <logger name = "com.mygame" level="debug" additivity = "false">
                <appender-ref ref="console" />
            </logger>
            <root level="error">
                <appender-ref ref="console" />
            </root>
        </Loggers>

     

  • 相关阅读:
    2021.07.01 学习总结
    2021.06.30 学习总结
    2021.06.29 学习总结
    2021.06.28 学习总结
    ubuntu 安装nginx报错./configure: error: SSL modules require the OpenSSL library
    Docker 启动alpine镜像中可执行程序文件遇到 not found
    docker基于cenots7 制作nginx镜像
    【Linux报错】VM虚拟机的CentOS7系统启动时报Generating /run/initramfs/rdsosreport.txt
    Docker Swarm 集群概念扩展
    Docker Swarm 集群弹性、动态扩缩容
  • 原文地址:https://www.cnblogs.com/wgslucky/p/10837036.html
Copyright © 2011-2022 走看看