java - 如何使用 log4j2 只记录一个级别?

标签 java logging configuration log4j log4j2

我在我的应用程序中使用 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/

相关文章:

xml - 用于检查 XML 配置文件内部一致性的工具、规则或过程

java - 无法在 java web3j 的 EthBlock.transactionObject 中获取交易值和发送者地址

java - 随机错误和 boolean 错误

java - 无法从 onClickListener 调用方法

android - Android 中的 Log.d() 或 Log.e() 打印不需要的额外文本

PHP fatal error : Class 'InvalidArgumentException' not found in <file> on line X?

java - 访问内部类中字段的推荐/正确方法是什么?

java - 通过JMS java登录数据库

python-2.7 - 在哪里可以找到 9.0.1 的 pip 配置文件

Android:防止屏幕方向改变但仍会收到通知