繁体   English   中英

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

[英]How to route log statements to specific file with log4j2?

我有一个log4j2附加程序,可通过使用Marker将任何Web和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>

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

<Loggers>
        <logger name="org.springframework.web.filter.CommonsRequestLoggingFilter"
                 level="DEBUG">
            <AppenderRef ref="WEB" />
        </logger>
</Loggers>

结果:存在两个问题:

1)过滤器内容打印到文件中,而不打印到CONSOLE 我想同时登录。

2)记录没有任何标记的任何常规信息记录(例如logger.info("test") )也记录到WEB.log文件中。 我想防止这种情况。

我的配置错误在哪里?

EDITED

  1. 未指定标记->登录到控制台
  2. 指定Web标记->登录到Web
  3. 使用的过滤器记录器->登录到Web和控制台

您可以通过拥有三个记录器来实现此目的。 将您的根记录程序设置为仅追加到控制台<AppenderRef ref="CONSOLE" /> 将您的过滤器记录器设置为追加到两者( <AppenderRef ref="CONSOLE" /><AppenderRef ref="WEB" /> )。 创建具有所需级别的第三个记录器,并通过<AppenderRef ref="WEB" />将其仅附加到web.log。 (实际上,如果您要指定标记,实际上甚至没有必要执行最后一步;据我所知,指定标记WEB只会告诉它仅登录到Web)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM