如何设置除我的包之外的所有内容的ERROR阈值

时间:2013-04-18 13:37:21

标签: logging log4j apache-commons-logging

我已经通过org.apache.log4j.PropertyConfigurator配置了日志记录

log4j.rootLogger=ERROR, console
log4j.logger.com.mypackage=INFO
log4j.appender.console=org.apache.log4j.ConsoleAppender
// pattern, layout
log4j.appender.console.Threshold=INFO

我使用了一些通过直接调用

来使用日志记录的第三方代码
org.apache.log4j.Logger.getLogger(name).callAppenders(...)

此调用会跳过任何级别检查,并仅依赖于appender阈值。 我无法增加appender阈值,因为我的包中的日志也不会通过它。 我想要我的代码的INFO日志级别和第3方的错误。

2 个答案:

答案 0 :(得分:1)

你必须定义2个appender,1个用于你的东西,另一个用于第三方的东西。然后配置将要引用的2个记录器。适当的appender具有正确的阈值。

类似的东西:

<appender name="mystuff" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="../logs/mystuff.log" />
    <param name="datePattern" value="yyyy-MM-dd" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{dd-MM-yyyy kk:mm:ss.SSS} %-5p %c %x - %m%n" />

    </layout>
</appender>

<appender name="thridPartystuff" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="../logs/thirdParty.log" />
    <param name="datePattern" value="yyyy-MM-dd" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{dd-MM-yyyy kk:mm:ss.SSS} %-5p %c %x - %m%n" />

    </layout>
</appender>

<logger name="com.mystuf" additivity="true">
    <level value="info" />
    <appender-ref ref="mystuff" />
</logger>

<logger name="com.third.party.package">
    <level value="error" />
    <appender-ref ref="thridPartystuff" />
</logger>

答案 1 :(得分:1)

有效的解决方案(虽然我觉得它不太好)与Cygnusx1提出的解决方案类似:定义两个具有不同阈值的控制台appender并相应地分配它们:

log4j.rootLogger=ERROR, console // receive error message on console from all packages
log4j.logger.com.problematic= , console2  // define another appender for the problematic package
log4j.additivity.com.problematic = false // don't propagate messages to root to avoid duplicates

log4j.appender.console2 = org.apache.log4j.ConsoleAppender
log4j.appender.console2.Threshold = ERROR