1

我已经通过 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

我使用了一些 3-rd 方代码,这些代码通过直接调用来使用日志记录

org.apache.log4j.Logger.getLogger(name).callAppenders(...)

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

4

2 回答 2

1

可行的解决方案(尽管我觉得它不是很好)类似于 Cygnusx1 提出的解决方案:定义两个具有不同阈值的控制台附加程序并相应地分配它们:

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
于 2013-04-22T07:06:34.593 回答
1

您必须定义 2 个附加程序,1 个用于您的东西,另一个用于第 3 方的东西。然后配置2个记录器,它将参考。具有正确阈值的适当附加程序。

像这样的东西:

<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>
于 2013-04-19T19:34:12.423 回答