使用log4j.xml如何配置日志记录器以根据类名追加到不同的日志文件?

27

我想设置log4j,使得com.foo.bar包下的所有日志消息都记录在bar.log文件中,com.bar.blatz包下的所有日志消息都记录在blatz.log文件中。

问题

  • 如何使用log4j.xml来实现这一点?
  • 我知道可以使用属性文件来实现,但是如何使用XML配置实现呢?
2个回答

39

以下是我对类似问题的答案的翻译:

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <!-- general application log -->
    <appender name="BarLogFile" class="org.apache.log4j.FileAppender">
        <param name="File" value="bar.log" />
        <param name="Threshold" value="INFO" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
        </layout>
    </appender> 

    <!-- additional fooSystem logging -->
    <appender name="BlatzLogFile" class="org.apache.log4j.FileAppender">
        <param name="File" value="blatz.log" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
        </layout>
    </appender>

    <logger name="com.foo.bar">
        <appender-ref ref="BarLogFile"/>
    </logger>

    <logger name="com.bar.blatz">
        <appender-ref ref="BlatzLogFile"/>
    </logger>

    <root>
        <level value="INFO"/>
        <!-- no appender, output will be swallowed (I think) -->
    </root>
</log4j:configuration>

如果您在根元素中添加一个appender-ref,它也将接收com.foo.bar等消息。您可以通过在记录器上指定“additivity =” false“来停止这个过程。

-4
  <root>
        <level value="INFO"/>
        <!-- no appender, output will be swallowed (I think) -->
  </root>

我们可以在这里添加附加器。如果应用程序正在使用根记录器,它将起作用。例如quartz Scheduler API。


9
...而且还要好得多。 - Reinstate Monica -- notmaynard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接