【问题标题】:log4j: Log output of a specific class to a specific appenderlog4j:将特定类的输出记录到特定的 appender
【发布时间】:2011-02-15 08:44:42
【问题描述】:

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

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

这个可以吗?

【问题讨论】:

    标签: java log4j logging appender


    【解决方案1】:

    一个例子:

    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
    

    【讨论】:

    • 啊——就这么简单!谢谢! log4j.additivity.foo.bar.Baz=false 设置是否强制 Baz 的输出不会显示在 rootLogger 的 appender 中?
    • 这是什么版本的 log4J?我正在尝试找到 xml 配置来为 log4j 版本 1.2.17 做同样的事情
    • @RodrigoGurgel 是的,没什么异常
    • @dwjohnston 将 additivity 设置为 false 将阻止记录器记录到其祖先的 appender(默认情况下为 true),在这种情况下,如果 additivity 保留为 true,则记录到 Baz appender会写入这两个文件。
    • 请参阅下面有关 XML 配置的答案,我今天正在寻找这个...
    【解决方案2】:

    这是关于 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>
    

    【讨论】:

    • &lt;root&gt; 中删除&lt;appender-ref ref="bdfile"/&gt; 至关重要 - 否则您将看到整个日志也复制到此文件中。
    • 如何为默认包或没有包的特定类配置这个?
    • 这是&lt;logger&gt;... 元素。将类或包指定为名称,将 appender 指定为文件 appender。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多