因为%C和%M是资源密集型的,因为模式
%d {yyyy-MM-dd HH:mm:ss} [%C] [%M] [%t]
我希望%C和%M仅在日志级别设置为debug(或更详细的级别)时才有效。
log4j是否对这种条件输出格式有任何规定?
答案 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。