Почему log4j2 влияет на TimeBasedTriggeringPolicy @Scheduled

Я настроил log4j2 с политикой TimeBasedTriggeringPolicy, с помощью которой я ожидаю, что файл журнала может быть свернут в файл zip каждый день в 00:00. Но этого не происходит.

        <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>

И когда я добавляю класс, как показано ниже, система создает zip-файл каждый день в 3:15.

@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 ответ

Как часто вы пишете записи журнала? Политика триггера, основанная на времени, переносится только в процессе регистрации события. Политика запуска cron использует планировщик и выполняет ролловер из потока, поэтому не нужно регистрировать событие для его запуска.

Другие вопросы по тегам