我在我的应用程序中使用 log4j2。
我想要的是“调试”之前的所有内容都转到控制台,“信息”之前的所有内容都转到 myapp.log,只有“信息”转到“myapp-audit.log”。
原因是,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>
最佳答案
如果您在 appender-ref 中指定 INFO,appender 将接收 INFO、WARN、ERROR 和 FATAL 事件。您可以通过过滤掉 WARN、ERROR 和 FATAL 级别的事件进一步限制为仅 INFO:
<File name="AuditFile" fileName="myapp-audit.log">
<PatternLayout
pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%nZ" />
<Filters>
<!-- First deny warn, error and fatal messages -->
<ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL"/>
<!-- Then accept info, warn, error, fatal and deny debug/trace -->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</File>
关于java - 如何使用 log4j2 只记录一个级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26108045/