Java log4j:将特定类的输出记录到特定的appender

Java log4j:将特定类的输出记录到特定的appender,java,log4j,logging,appender,Java,Log4j,Logging,Appender,我使用log4j,并希望将某些记录器的输出路由到特定文件 我已经有了多个附加器。现在,为了简化调试,我想告诉log4j,由特定类(例如foo.bar.Baz)生成的输出应该写入特定的日志文件 可以这样做吗?举个例子: log4j.rootLogger=ERROR, logfile log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender log4j.appender.logfile.datePattern='-'dd'.l

我使用log4j,并希望将某些记录器的输出路由到特定文件

我已经有了多个附加器。现在,为了简化调试,我想告诉log4j,由特定类(例如foo.bar.Baz)生成的输出应该写入特定的日志文件

可以这样做吗?

举个例子:

log4j.rootLogger=ERROR, logfile

log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.datePattern='-'dd'.log'
log4j.appender.logfile.File=log/radius-prod.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n

log4j.logger.foo.bar.Baz=DEBUG, myappender
log4j.additivity.foo.bar.Baz=false

log4j.appender.myappender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.myappender.datePattern='-'dd'.log'
log4j.appender.myappender.File=log/access-ext-dmz-prod.log
log4j.appender.myappender.layout=org.apache.log4j.PatternLayout
log4j.appender.myappender.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n

下面是一个关于XML配置的答案,请注意,如果不为文件追加器提供转换模式,它将创建0字节的文件,而不会写入任何内容:

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

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
        </layout>
    </appender>

    <appender name="bdfile" class="org.apache.log4j.RollingFileAppender">
        <param name="append" value="false"/>
        <param name="maxFileSize" value="1GB"/>
        <param name="maxBackupIndex" value="2"/>
        <param name="file" value="/tmp/bd.log"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
        </layout>
    </appender>

    <logger name="com.example.mypackage" additivity="false">
        <level value="debug"/>
        <appender-ref ref="bdfile"/>
    </logger>

    <root>
        <priority value="info"/>
        <appender-ref ref="bdfile"/>
        <appender-ref ref="console"/>
    </root>

</log4j:configuration>

啊-太简单了!谢谢log4j.additivity.foo.bar.Baz=false设置是否强制要求Baz的输出不会显示在rootLogger的appender中?这是什么版本的log4j?我试图找到xml配置,以便对log4j版本1.2执行相同的操作。17@RodrigoGurgel是的,没什么不寻常的there@dwjohnston将additivity设置为false将阻止记录器记录到其祖先的附加器。默认情况下,如果additivity设置为true,则为true,登录到Baz appender将写入这两个文件。对xml配置有何想法?从中删除非常重要-否则您将看到整个日志也复制到此文件。如何将其配置为默认包或不带包的特定类?这是。。。要素将类或包指定为名称,将appender指定为文件appender。