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

gub*_*utz 155 java logging log4j appender

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

我已经有多个appender了.现在,为了使调试更容易,我想告诉log4j应该将特定类(例如foo.bar.Baz)生成的输出写入特定的日志文件.

可以这样做吗?

Mau*_*rry 197

一个例子:

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
Run Code Online (Sandbox Code Playgroud)

  • 啊 - 那简单!谢谢!log4j.additivity.foo.bar.Baz = false设置是否强制执行Baz的输出不会显示在rootLogger的appender中? (20认同)
  • 这是什么版本的log4J?我正在尝试找到xml配置来为log4j版本1.2.17做同样的事情 (3认同)
  • @dwjohnston将additivity设置为false将阻止记录器记录到它的祖先的appenders(默认情况下是真的),在这种情况下,如果将additivity保持为true,则记录到Baz appender会写入两个文件. (3认同)
  • 请参阅下面有关 XML 配置的答案,我今天正在寻找这个... (2认同)

mik*_*keb 20

这是关于XML配置的答案,请注意,如果你不给文件appender 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>
Run Code Online (Sandbox Code Playgroud)

  • 从`<root>`中删除`<appender-ref ref ="bdfile"/>`是很关键的 - 否则你会看到你的整个日志也被复制到这个文件中. (2认同)