Log4j配置

时间:2012-02-03 07:51:17

标签: log4j

我的项目中有两个appender,即文件和控制台。我想将我的应用程序配置为执行:

所有名称为“my.app。*”的记录器:

1. log events DEBUG and higher to fileA
2. log events DEBUG and higher to fileB

所有其他记录器:

1. log events WARN and higher to fileA
2. log events DEBUG and higher to fileB

理想情况下,配置看起来像这样:

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="fileA" class="org.apache.log4j.FileAppender">
    <!-- configuration -->
</appender>

<appender name="fileB" class="org.apache.log4j.FileAppender">
    <!-- configuration -->
</appender>

<logger name="my.app" additivity="false">
    <level="DEBUG"/>
    <appender-ref ref="fileA"/>
</logger>

<logger name="" additivity="true">
    <level="DEBUG"/>
    <appender-ref ref="fileB"/>
</logger>

<root>
    <level="WARN"/>
    <appender-ref ref="fileA"/>
</root>
</log4j>

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="fileA" class="org.apache.log4j.FileAppender"> <!-- configuration --> </appender> <appender name="fileB" class="org.apache.log4j.FileAppender"> <!-- configuration --> </appender> <logger name="my.app" additivity="false"> <level="DEBUG"/> <appender-ref ref="fileA"/> </logger> <logger name="" additivity="true"> <level="DEBUG"/> <appender-ref ref="fileB"/> </logger> <root> <level="WARN"/> <appender-ref ref="fileA"/> </root> </log4j>

但是,此设置会导致名为“my.app”的记录器仅记录到控制台,并使所有其他记录器记录到WARN及更高版本的控制台。基本上,被忽略了。是否有另一种方法可以使用log4j模拟此行为?

PS。我为糟糕的格式道歉,真的很难让今晚上班:/

1 个答案:

答案 0 :(得分:2)

你需要:

<logger name="my.app" additivity="false">
    <level="DEBUG"/>
    <appender-ref ref="console"/>
    <appender-ref ref="file"/>
</logger>

<root>
    <appender-ref ref="console-warn"/>
    <appender-ref ref="file-debug"/>
</root>

对于root-appender,您需要两个具有所需级别限制的新控制台/文件追加器。

<appender name="file-debug" class="org.apache.log4j.FileAppender">
    <param name="Threshold" value="DEBUG"/>
</appender>

<appender name="console-warn" class="org.apache.log4j.ConsoleAppender">
    <param name="Threshold" value="WARN"/>
</appender>