logback的RollingFileAppender不是使用EvaluatorFilter滚动文件

时间:2018-03-01 19:16:11

标签: logback rollingfileappender

当使用 EvaluatorFilter 时,Logback框架的 ch.qos.logback.core.rolling.RollingFileAppender 不会滚动文件:

<appender name="APPLICATION-INFO"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.root}/${CONTEXT_NAME}-INFO.log</file>
    <append>true</append>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${log.root}/${CONTEXT_NAME}-INFO-%d{yyyyMMdd}.log
        </fileNamePattern>
    </rollingPolicy>
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
        <evaluator> 
            <expression>return (level == INFO || level == WARN);</expression>
        </evaluator>
        <OnMismatch>DENY</OnMismatch>
        <OnMatch>ACCEPT</OnMatch>
    </filter>
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <layout class="com.xxx.yyyy.zzz.logging.json.JsonLayout">
            <timestampFormat>${timestampFormat}</timestampFormat>
            <includeMDC>false</includeMDC>
        </layout>
        <immediateFlush>true</immediateFlush>
    </encoder>
</appender>

但是以下配置会滚动日志文件。

<appender name="APPLICATION-ERROR"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.root}/${CONTEXT_NAME}-ERROR.log</file>
    <append>true</append>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${log.root}/${CONTEXT_NAME}-ERROR-%d{yyyyMMdd}.log
        </fileNamePattern>
    </rollingPolicy>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <layout class="com.xxx.yyy.zzz.logging.json.JsonLayout">
            <timestampFormat>${timestampFormat}</timestampFormat>
            <includeMDC>false</includeMDC>
        </layout>
        <immediateFlush>true</immediateFlush>
    </encoder>
</appender> 

1 个答案:

答案 0 :(得分:1)

我有点懒于在本地测试,但我有一个线索可能是错的:-)在docs of logback中写道:

  

由于各种技术原因,翻车不是时钟驱动的   取决于伐木事件的到来。例如,3月8日   假设fileNamePattern设置为yyyy-MM-dd(每日   翻滚),午夜后第一个事件的到来将触发   翻滚。如果没有记录事件,例如23分钟和   午夜过后47秒,然后翻滚将实际发生在   3月9日00:23'47 AM,而不是凌晨0:00。

基于此,可能的猜测是您配置的默认JaninoEventEvaluator没有接受正确的日志记录事件。

另一个猜测是你没有正确引用appender,但问题中没有足够的细节。