我想设置 log4j,以便从包 com.foo.bar 下的类生成的所有日志消息都转到 bar.log,并且从包 com.bar.blatz 下的类生成的所有日志消息都转到 blatz.log。
问题
- 如何使用 log4j.xml 执行此操作?
- 我知道它可以使用属性文件,但我该如何使用 XML 配置呢?
我想设置 log4j,以便从包 com.foo.bar 下的类生成的所有日志消息都转到 bar.log,并且从包 com.bar.blatz 下的类生成的所有日志消息都转到 blatz.log。
这是基于我对类似问题的回答:
<!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"' 来停止这种情况。
<root>
<level value="INFO"/>
<!-- no appender, output will be swallowed (I think) -->
</root>
我们可以在这里添加附加程序。如果应用程序使用根记录器,它将起作用。例如石英调度程序 API。