我有一个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文件中。我想阻止这一点。
我的配置错误在哪里?
答案 0 :(得分:0)
EDITED
您可以通过使用三个记录器来实现此目的。将根记录器设置为仅附加到控制台<AppenderRef ref="CONSOLE" />
。设置过滤器记录器以附加到(<AppenderRef ref="CONSOLE" />
和<AppenderRef ref="WEB" />
)。创建具有所需级别的第三个记录器,并将其仅追加到<AppenderRef ref="WEB" />
的web.log。 (实际上最后一步可能不是必要的,如果你指定了标记;据我所知,指定标记WEB会告诉它只能登录到web)