条件log4j.xml模式

时间:2014-07-23 23:45:29

标签: java log4j

因为%C和%M是资源密集型的,因为模式

%d {yyyy-MM-dd HH:mm:ss} [%C] [%M] [%t]

我希望%C和%M仅在日志级别设置为debug(或更详细的级别)时才有效。

log4j是否对这种条件输出格式有任何规定?

2 个答案:

答案 0 :(得分:1)

与Matt之前建议的类似,您还可以附加过滤器来记录Appender并将多个Appender附加到单个记录器。例如:

<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="%d{yyyy-MM-dd HH:mm:ss} [%C][%M][%t] - %m%n" />
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
        <param name="LevelMax" value="DEBUG" />
    </filter>
</appender>

<appender name="console2" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%t] - %m%n" />
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
        <param name="LevelMin" value="INFO" />
    </filter>
</appender>

<root>
    <priority value="debug" />
    <appender-ref ref="console" />
    <appender-ref ref="console2" />
</root>

</log4j:configuration>

这应输出您需要的模式。第一个appender上的最大级别过滤器应该防止高日志级别,第二个appender上的最小级别防止调试级别语句出现两次。

希望这有帮助。

答案 1 :(得分:0)

您可以使用另一个将additivity="false"设置为调试级别的记录器以及仅接受DEBUG或更低级别的ThresholdFilter。不过,这将是一项工作。如果这不起作用,file an issue