【问题标题】:How to log LoggerMarker to specific file only?如何仅将 LoggerMarker 记录到特定文件?
【发布时间】:2015-04-20 08:54:39
【问题描述】:

我正在尝试使用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 内容另外记录到控制台。 但是当我删除 &lt;AppenderRef ref="FILTERED" /&gt; 表单 &lt;root&gt; 记录器时,文件中不再记录任何内容!

【问题讨论】:

    标签: java logging configuration log4j log4j2


    【解决方案1】:

    如何在带有 DENY 操作的控制台附加程序上使用标记过滤器?

    您可以在 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-10
      • 1970-01-01
      • 2020-04-27
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多