为什么 log4j2 TimeBasedTriggeringPolicy 受到 @Scheduled 的影响

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

我将 log4j2

<RollingFile>
配置为
TimeBasedTriggeringPolicy
的策略,通过该策略,我希望日志文件可以在每天 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 rollup 机制受到 Spring @Schedule 注解的影响,这很奇怪,不是吗?有人知道我怎样才能避免这种情况发生吗?谢谢!

log4j2 spring-scheduled
1个回答
2
投票

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

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