我在我的应用程序中使用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,则附加程序将接收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>

10-08 11:19
查看更多