如何仅将LoggerMarker记录到特定文件?

时间:2015-04-20 08:54:39

标签: java logging configuration log4j log4j2

我试图使用log4j2

来实现以下目标

将所有常规内容记录到控制台,但仅将MarkerFilter.FILTERED记录到特定文件,而不是登录到控制台。

<Configuration>
    <Appenders>
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
        </Console>


        <RollingFile name="FILTERED" fileName="filtered.txt" />
            <MarkerFilter marker="FILTERED" onMatch="ACCEPT" onMismatch="DENY"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="all">
            <AppenderRef ref="CONSOLE" />
            <AppenderRef ref="FILTERED" />
        </Root>
    </Loggers>
</Configuration>

以下工作原理,但另外将任何FILTERED内容记录到控制台。 但是当我删除<AppenderRef ref="FILTERED" />形式<root>记录器时,该文件不会再记录任何内容了!

1 个答案:

答案 0 :(得分:1)

如何使用DENY操作在控制台appender上使用标记过滤器?

您可以在appender-ref上设置级别,因此您无需使用ThresholdFilter

<Configuration status="warn">
    <Appenders>
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <MarkerFilter marker="FILTERED" onMatch="DENY" onMismatch="ACCEPT"/>
        </Console>

        <RollingFile name="FILTERED" fileName="filtered.txt" />
            <MarkerFilter marker="FILTERED" onMatch="ACCEPT" onMismatch="DENY"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="all">
            <AppenderRef ref="CONSOLE" level="info" />
            <AppenderRef ref="FILTERED" />
        </Root>
    </Loggers>
</Configuration>