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

问题描述 投票:0回答:1

当使用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> 
logback rollingfileappender
1个回答
1
投票

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

由于各种技术原因,翻转不是时钟驱动的,而是取决于记录事件的到来。例如,在2002年3月8日,假设fileNamePattern设置为yyyy-MM-dd(每日翻转),则午夜之后第一个事件的到达将触发翻转。如果在午夜之后的23分47秒没有记录事件,那么翻转实际上将发生在3月9日00:23'47 AM而不是0:00 AM。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.