log4j:将特定类的输出记录到特定附加程序


161

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

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

能做到吗?

Answers:


203

一个例子:

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

21
啊-这么简单!谢谢!log4j.additivity.foo.bar.Baz = false设置是否强制Baz的输出不会显示在rootLogger的附加程序中?
gubrutz

3
这是什么版本的log4J?我正在尝试查找xml配置,以对log4j版本1.2.17做同样的事情
AC

1
@RodrigoGurgel是的,那里没有什么不寻常的地方
Maurice Perry

4
@dwjohnston将additivity设置为false将阻止记录器记录其祖先的附加程序(默认情况下为true),在这种情况下,如果将additivity保留为true,则登录到Baz附加程序将已写入两个文件。
莫里斯·佩里

1
关于xml配置有什么想法吗?
伊戈尔·多宁

21

这是有关XML配置的答案,请注意,如果不给文件附加器一个文件ConversionPattern,它将创建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>

2
关键是要除去 <appender-ref ref="bdfile"/><root>-否则,你将看到你的整个日志复制到该文件中。
sab 2016年

如何为默认pacakge或没有包的特定类配置此功能?
Prasad Jadhav'17

这是<logger>...要素。指定类或包作为名称,并将追加器指定为文件追加器。
mikeb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.