关于log4j的一个坑

栏目: Java · 发布时间: 6年前

内容简介:在生产环境的日志配置中新加了一个日志文件输出配置,如下注释处:这个新增的配置会在原有的日志文件 main.log 外,新增一个全新的日志文件 analysis.log 记录一些信息。结果上线后,不仅日志输出到了 analysis.log,同时也输出到了 main.log 中了一份,冗余了。Google 了一下,原来是原来,在如下的两个

在生产环境的日志配置中新加了一个日志文件输出配置,如下注释处:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration>
    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{MM-dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\}:%L - %m%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="levelMin" value="error"/>
            <param name="levelMax" value="off"/>
            <param name="AcceptOnMatch" value="true"/>
        </filter>
    </appender>

    <appender name="DAILY_ROLLING_FILE" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="../log/main.log"/>
        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{MM-dd HH:mm:ss SSS\} %-5p] [%t] %c{3\}:%L - %m%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelMatchFilter">
            <param name="LevelToMatch" value="ERROR"/>
            <param name="AcceptOnMatch" value="true"/>
        </filter>
    </appender>

    <!-- 新增配置开始 -->
    <appender name="ANALYSIS_DAILY_ROLLING_FILE" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="../log/analysis.log"/>
        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%m%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelMatchFilter">
            <param name="LevelToMatch" value="INFO"/>
            <param name="AcceptOnMatch" value="true"/>
        </filter>
    </appender>

    <appender name="ASYNC_ANALYSIS_DAILY_ROLLING_FILE" class="org.apache.log4j.AsyncAppender">
        <appender-ref ref="ANALYSIS_DAILY_ROLLING_FILE"/>
    </appender>

    <logger name="LOGGER_ANALYSIS">
        <level value="INFO"/>
        <appender-ref ref="ASYNC_ANALYSIS_DAILY_ROLLING_FILE"/>
    </logger>
    <!-- 新增配置结束 -->

    <root>
        <level value="ERROR"/>
        <appender-ref ref="DAILY_ROLLING_FILE"/>
    </root>
</log4j:configuration>

这个新增的配置会在原有的日志文件 main.log 外,新增一个全新的日志文件 analysis.log 记录一些信息。结果上线后,不仅日志输出到了 analysis.log,同时也输出到了 main.log 中了一份,冗余了。Google 了一下,原来是 rootadditivity 的问题。

原来,在如下的两个 logger 中,存在着继承关系, LOGGER_ANALYSIS 是继承了 root

<logger name="LOGGER_ANALYSIS">
    <level value="INFO"/>
    <appender-ref ref="ASYNC_ANALYSIS_DAILY_ROLLING_FILE"/>
</logger>

<root>
    <level value="ERROR"/>
    <appender-ref ref="DAILY_ROLLING_FILE"/>
</root>

继承,就意味着 LOGGER_ANALYSIS 是继承了 rootappender-ref 的,因此, LOGGER_ANALYSIS 不知输出到了自己的 appender 设置的文件 analysis.log 里,也会输出到 DAILY_ROLLING_FILE 对应的 main.log 里,也就是冗余了。

那么,怎么解决呢?很简单,让儿子不继承爸爸就好了,不做富二代,白手起家,自己打天下。

<logger name="LOGGER_ANALYSIS" additivity="false">
    <level value="INFO"/>
    <appender-ref ref="ASYNC_ANALYSIS_DAILY_ROLLING_FILE"/>
</logger>

注意上边的 additivity="false" 就这个设置,就声明和 root 脱离父子关系了,独立了。问题解决。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计数组合学(第一卷)

计数组合学(第一卷)

斯坦利 / 付梅、侯庆虎、辛国策 / 高等教育 / 2009-6 / 42.00元

《计数组合学(第1卷)》是两卷本计数组合学基础导论中的第一卷,适用于研究生和数学研究人员。《计数组合学(第1卷)》主要介绍生成函数的理论及其应用,生成函数是计数组合学中的基本工具。《计数组合学(第1卷)》共分为四章,分别介绍了计数(适合高年级的本科生),筛法(包括容斥原理),偏序集以及有理生成函数。《计数组合学(第1卷)》提供了大量的习题,并几乎都给出了解答,它们不仅是对《计数组合学(第1卷)》正......一起来看看 《计数组合学(第一卷)》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换