[英]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
您可以通过拥有三个记录器来实现此目的。 将您的根记录程序设置为仅追加到控制台<AppenderRef ref="CONSOLE" />
。 将您的过滤器记录器设置为追加到两者( <AppenderRef ref="CONSOLE" />
和<AppenderRef ref="WEB" />
)。 创建具有所需级别的第三个记录器,并通过<AppenderRef ref="WEB" />
将其仅附加到web.log。 (实际上,如果您要指定标记,实际上甚至没有必要执行最后一步;据我所知,指定标记WEB只会告诉它仅登录到Web)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.