如何使用LOG4J将具有不同级别的特定类记录到不同的appender

时间:2015-10-22 09:14:22

标签: java xml logging log4j

我有一种情况,我有2个appender,一个写入控制台,另一个写入文件。除了一个类,我想用DEBUG级别记录所有内容。 对于这个类,我想将DEBUG记录到控制台,将ERROR记录到文件。

我发现这种过滤是通过类别标记完成的,但是我没有设法将不同的级别拆分为特定类的不同appender。

有办法吗?

目前的配置如下:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration>
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601}: %p [%t] %c - %m%n"/>
        </layout>
    </appender>

    <appender name="file-bl" class="org.apache.log4j.rolling.RollingFileAppender">
        <param name="append" value="true"/>
        <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
            <param name="FileNamePattern" value="log/server-bl2.log.%d{yyyy-MM-dd}.gz"/>
            <param name="ActiveFileName" value="log/server-bl2.log"/>
        </rollingPolicy>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601}: %p [%t] %c - %m%n"/>
        </layout>
    </appender>

    <logger name="org">
        <level value="DEBUG"/>
        <appender-ref ref="console"/>
        <appender-ref ref="file-bl"/>
    </logger>

    <logger name="org.springframework" additivity="false">
        <level value="ERROR"/>
        <appender-ref ref="file-bl"/>
    </logger>

    <root>
        <priority value="DEBUG" />
        <appender-ref ref="console" />
        <appender-ref ref="file-bl" />
    </root>

</log4j:configuration>

1 个答案:

答案 0 :(得分:0)

好的,最后我提出了这样的解决方案:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration>
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601}: %p [%t] %c - %m%n"/>
        </layout>
    </appender>

    <appender name="file-bl" class="org.apache.log4j.rolling.RollingFileAppender">
        <param name="append" value="true"/>
        <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
            <param name="FileNamePattern" value="log/server-bl.log.%d{yyyy-MM-dd}.gz"/>
            <param name="ActiveFileName" value="log/server-bl.log"/>
        </rollingPolicy>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601}: %p [%t] %c - %m%n"/>
        </layout>
    </appender>

    <logger name="org.springframework" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="console"/>
    </logger>

    <logger name="org.mybatis" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="console"/>
    </logger>    

    <root>
        <priority value="DEBUG" />
        <appender-ref ref="console" />
        <appender-ref ref="file-bl"/>
    </root>

</log4j:configuration>

日志记录的根级别是DEBUG,还有2个appender:console和file-bl。然后,有2个例外:org.springframework和org.mybatis。 对于他们来说只有1个appender适用 - 控制台。

尽管如此,它并不是我在开始时描述的问题的精确解决方案,因为我根本没有记录org.springframework和org.mybatis。