如何使用log4j2将日志语句路由到特定文件?

时间:2017-05-17 11:12:54

标签: java logging log4j log4j2

我有一个log4j2 appender,可以使用Marker将任何网页和xml内容记录到特定文件中。

<Appenders>
       <RollingRandomAccessFile name="WEB" fileName="web.log">
        <Filters>
            <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
            <MarkerFilter marker="WEB" onMatch="ACCEPT" onMismatch="DENY" />
        </Filters>
        </RollingRandomAccessFile>
</Appenders>

我可以在我的代码中成功使用它,如下所示:

logger.info(MarkerFactory.getMarker("WEB"), "myinfo");

此外,我希望将内容打印到sysout控制台:

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

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

但是:现在应该以{{1​​}}模式记录以下类,但只能记录到DEBUG文件,并且在控制台中也可以看到。

web.log

结果:有两个问题:

1)过滤器内容将打印到文件中,但不会打印到<Loggers> <logger name="org.springframework.web.filter.CommonsRequestLoggingFilter" level="DEBUG"> <AppenderRef ref="WEB" /> </logger> </Loggers> 。我想登录这两个。

2)没有任何标记(如CONSOLE)记录的任何正常信息记录也会记录到WEB.log文件中。我想阻止这一点。

我的配置错误在哪里?

1 个答案:

答案 0 :(得分:0)

EDITED

  1. 未指定标记 - &gt;登录到控制台
  2. 指定的网络标记 - &gt;登录网站
  3. 使用的过滤器记录器 - &gt;登录到Web和控制台
  4. 您可以通过使用三个记录器来实现此目的。将根记录器设置为仅附加到控制台<AppenderRef ref="CONSOLE" />。设置过滤器记录器以附加到(<AppenderRef ref="CONSOLE" /><AppenderRef ref="WEB" />)。创建具有所需级别的第三个记录器,并将其仅追加到<AppenderRef ref="WEB" />的web.log。 (实际上最后一步可能不是必要的,如果你指定了标记;据我所知,指定标记WEB会告诉它只能登录到web)