【问题标题】:How to log specific class with different levels to different appenders with LOG4J如何使用 LOG4J 将具有不同级别的特定类记录到不同的附加程序
【发布时间】:2015-10-22 09:14:22
【问题描述】:

我有 2 个附加程序,一个写入控制台,另一个写入文件。我想用 DEBUG 级别记录除一个类之外的所有内容。 对于这个类,我想将 DEBUG 记录到控制台并将 ERROR 记录到文件。

我发现这种过滤是通过类别标签完成的,但是我没有设法将不同级别拆分到特定类的不同附加程序。

有办法吗?

当前配置如下:

<?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>

【问题讨论】:

    标签: java xml logging log4j


    【解决方案1】:

    好的,所以最后我想出了一个这样的解决方案:

    <?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 个附加程序:控制台和 file-bl。然后,有 2 个例外:org.springframework 和 org.mybatis。 对他们来说,只有 1 个附加程序适用 - 控制台。

    不过,由于我根本没有记录 org.springframework 和 org.mybatis,所以这并不是我在开头描述的问题的确切解决方案。

    【讨论】:

      猜你喜欢
      • 2012-06-24
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      • 2012-09-19
      • 1970-01-01
      • 2013-06-11
      相关资源
      最近更新 更多