#java #log4j2
#ява #log4j2 #java
Вопрос:
У меня есть несколько файлов журналов, которые я хочу ежедневно прокручивать и архивировать в gzips.
Соответствующая конфигурация выглядит следующим образом:
<Appenders>
<RollingFile name="MyLog"
fileName="${sys:log.dir}/mylog.log"
filePattern="${sys:log.dir}/mylog-%d{yyyy-MM-dd}.log.gz">
<PatternLayout pattern="%d %p | %m | %c{1.} [%t]%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="MyLog"/>
</Root>
</Loggers>
Таким образом, каталог журнала может выглядеть следующим образом
mylog-2020-01-01.log.gz
mylog-2020-01-02.log.gz
mylog-2020-01-03.log.gz
mylog.log // todays logs (let's say its the 4th Jan)
Это работает нормально, за исключением того, что файл журнала не загружается быстро в конце дня, он загружается лениво всякий раз, когда добавляется первое сообщение журнала на следующий день.
Из-за характера того, что я регистрирую (связано с сеансами клиента), это может произойти значительно позже полуночи. Это могут быть часы или даже дни.
Было бы удобно иметь возможность ls
просматривать файлы в каталоге журнала на интересующую меня дату. На данный момент я не могу сделать это надежно, потому что есть вероятность, что вчерашние журналы еще не были свернуты; в этом случае mylog.log
это не журналы с сегодняшнего дня, а журналы со вчерашнего дня.
Есть ли способ настроить его так, чтобы он с готовностью, а не лениво, выполнял свертку файлов?
Я мог бы добавить cronjob для очистки, но я не решаюсь, потому что, если около полуночи происходит ведение журнала, я не хочу возиться с файлами, в которые log4j пытается записать. Похоже, что это было бы чревато ошибками.
Ответ №1:
Похоже, проблема в TimeBasedTriggeringPolicy
TimeBasedTriggeringPolicy
Вызывает откат , когда шаблон даты / времени больше не применяется к активному файлу
Похоже, что политика на основе cron будет работать для меня
CronTriggeringPolicy
Запускает опрокидывание на основе выражения cron. Эта политика управляется таймером и асинхронна с обработкой событий журнала, поэтому возможно, что события журнала за предыдущий или следующий период времени могут отображаться в начале или конце файла журнала
Для выполнения в полночь каждый день:
<Policies>
<CronTriggeringPolicy schedule="0 0 0 * * *"/>
</Policies>