Java 条件log4j.xml模式

Java 条件log4j.xml模式,java,log4j,Java,Log4j,因为%C和%M是资源密集型的,所以对于该模式 %d{yyyy-MM-dd HH:MM:ss}[%C][%M][%t] 我希望只有当日志级别设置为调试(或更详细的级别)时,%C和%M才有效 log4j是否对此类条件输出格式有任何规定?您可以使用另一个记录器,将调试级别设置为additivity=“false”,并与仅接受调试或更低级别的阈值过滤器相结合。不过,这需要做一点工作。如果这不起作用,.与Matt之前的建议类似,您还可以将过滤器附加到日志附加器,并将多个附加器附加到单个日志记录器。例如:

因为%C和%M是资源密集型的,所以对于该模式

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

我希望只有当日志级别设置为调试(或更详细的级别)时,%C和%M才有效


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

您可以使用另一个记录器,将调试级别设置为
additivity=“false”
,并与仅接受调试或更低级别的
阈值过滤器相结合。不过,这需要做一点工作。如果这不起作用,.

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

<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上的max-level过滤器应防止出现高日志级别,第二个appender上的min-level过滤器应防止调试级别语句出现两次

希望这有帮助