slf4j配置记录单个文件

slf4j configuration to log a single file

logback.spring.xml 配置为仅在单个 class

上登录
<logger name="classname">
        <appender-ref ref="AUDIT_LOG"/>
</logger>

在 class 中只有 1 个调用记录。但是当我查看创建的日志文件时,有 40 000 多行废话。有我想要的1行,但其他40 000行不应该在那里。

我必须如何配置 logback 以确保日志文件只包含 1 个日志调用而不包含其他内容?

 <appender name="AUDIT_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/audit/audit.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${LOG_PATH}/audit/audit.%i.log.gz</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>10</maxIndex>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>10MB</maxFileSize>
        </triggeringPolicy>
        <encoder>
            <charset>utf-8</charset>
            <Pattern>${FILE_LOG_PATTERN}</Pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
</appender>

听起来就像你希望AUDIT_LOG为一个记录器保留而为那个记录器保留。

这条指令...

<logger name="classname">
    <appender-ref ref="AUDIT_LOG"/>
</logger>

... 将日志事件从 classname 记录器定向到 AUDIT_LOG 但它不会阻止其他日志事件由该附加程序处理。

如果你想确保 AUDIT_LOG appender 只处理特定记录器的事件,那么你可以使用 EvaluatorFilter.

这是一个使用 Logback 的 JaninoEventEvaluator 的例子:

<appender name="AUDIT_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- this filter will accept all log events having the logger name "classname" -->
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
        <evaluator>
            <expression>return logger.equals("classname");</expression>
        </evaluator>
        <OnMismatch>DENY</OnMismatch>
        <OnMatch>NEUTRAL</OnMatch>
    </filter>

    <file>${LOG_PATH}/audit/audit.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>${LOG_PATH}/audit/audit.%i.log.gz</fileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>10</maxIndex>
    </rollingPolicy>
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>10MB</maxFileSize>
    </triggeringPolicy>
    <encoder>
        <charset>utf-8</charset>
        <Pattern>${FILE_LOG_PATTERN}</Pattern>
    </encoder>
</appender>

注意:计算器表达式是...

arbitrary Java language block returning a boolean value as the evaluation criteria