我有一个log4j2
附加器,通过使用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>
但是:现在应该在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文件中。我想阻止这种情况发生。
我的错误配置在哪里?
发布于 2017-05-17 21:02:09
编辑过的
您可以通过使用三个记录器来实现这一点。将根记录器设置为仅附加到控制台<AppenderRef ref="CONSOLE" />
。将过滤器记录器设置为同时附加到两个文件(<AppenderRef ref="CONSOLE" />
和<AppenderRef ref="WEB" />
)。创建具有所需级别的第三个记录器,并通过<AppenderRef ref="WEB" />
将其仅附加到web.log。(实际上,如果您指定了标记,那么最后一步甚至可能都不是必需的;据我所知,指定标记WEB将告诉它只登录到web)
https://stackoverflow.com/questions/44023245
复制相似问题