为什么log4j2 TimeBasedTriggeringPolicy受@Scheduled影响

时间:2016-03-18 07:45:42

标签: log4j2 spring-scheduled

我使用TimeBasedTriggeringPolicy策略配置了log4j2,我希望每天00:00可以将日志文件转换为zip文件。但它不会发生。

        <RollingFile name="RollingFile" ignoreExceptions="false" fileName="${log.file.dir}/aaa.log" filePattern="${log.file.dir}/$${date:yyyy-MM}/aaa-%d{yyyy-MM-dd}-%i.log.gz">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n" />
        <Policies>
            <OnStartupTriggeringPolicy />
            <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="128 MB" />
        </Policies>
        <DefaultRolloverStrategy max="1000"/>
    </RollingFile>

当我添加如下所示的类时,系统每天在3:15创建一个zip文件。

@Component
public class Scheduler {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Scheduled(cron="0 15 3 * * ?") //3:15 every day
    public void doSomething() {    
        logger.info("3:15 every day");
    }  
}

对于log4j2汇总机制受Spring @Schedule注释的影响,这是非常奇怪的,不是吗?谁知道我怎么能避免这种情况发生?谢谢!

1 个答案:

答案 0 :(得分:1)

您多久写一次日志记录?基于时间的触发策略仅在记录事件的过程中翻转。 cron触发策略使用调度程序并从线程执行翻转,因此不需要记录事件来触发它。