我在我的应用程序中使用log4j 2。
我想要的是所有到“debug”的内容都转到控制台,所有到“info”的内容都转到myapp.log,只有“info”才能转到“myapp-audit.log”。
原因是,INFO主要由对数据的成功修改组成(例如,“用户已创建”、“用户已更新”、“用户已删除”等)。它实际上是数据修改的审核日志。
但我不知道该怎么做。
如何仅获取“info”以登录到“myapp-audit.log”?以下是我的当前配置...
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<File name="LogFile" fileName="myapp.log">
<PatternLayout
pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</File>
<File name="AuditFile" fileName="myapp-audit.log">
<PatternLayout
pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</File>
</appenders>
<loggers>
<root level="debug">
<appender-ref ref="Console" level="debug" />
<appender-ref ref="LogFile" level="info" />
<appender-ref ref="AuditFile" level="info" /> <!-- I want ONLY 'info' here -->
</root>
</loggers>
</configuration>
4条答案
按热度按时间oo7oh9g91#
如果在appender-ref中指定INFO,则appender将接收INFO、WARN、ERROR和FATAL事件。通过过滤掉WARN、ERROR和FATAL级别的事件,可以进一步限制为仅接收INFO:
pod7payv2#
你不能直接这样做,因为
info
级别包含了“以上”的所有内容--警告、错误、致命。在课程中:
在xml:
或者,您可以使用RoutingAppender(您可以使用
ThreadContext
以外的其他格式):在xml:
9ceoxa923#
您可以使用LevelRangeFilter。它有minLevel和maxLevel属性(当然还有onMatch和onMismatch属性)。
例如(在json中)我们需要在控制台中只打印信息和警告级别的日志:
如果你只想要信息级别,那么将“info”写入属性min和max。
dced5bon4#
补充Remko Popma的答案-您可以使用两个阈值过滤器拒绝任何高于和低于所需水平的内容。