slf4j配置记录单个文件

时间:2018-02-13 12:11:11

标签: java spring logging logback slf4j

logback.spring.xml配置为仅记录单个类

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

在课堂上只有一次来电记录。但是当我查看创建的日志文件时,有4万多行无意义。我想要的是1行,但其他4万行不应该在那里。

我如何配置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>

1 个答案:

答案 0 :(得分:1)

听起来就像您想要为一个记录器保留AUDIT_LOG而为该记录器保留

这条指令......

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

...将日志事件从classname记录器定向到AUDIT_LOG,但它不会阻止该appender处理其他日志事件。

如果您想确保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>

注意:评估者表达式是......

  

任意Java语言块返回布尔值作为评估标准