Почему 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 использует планировщик и выполняет ролловер из потока, поэтому не нужно регистрировать событие для его запуска.