Log4j fileappender не переключается на новый файл, когда logrotate вращает файл журнала
Контекст:
Я хочу использовать log4j для записи журналов, связанных с аудитом, в конкретный файл журнала, скажем, audit.log. Я не хочу использовать syslogappender (на основе udp), потому что я не хочу быть терпимым к потере данных. Кроме того, я использую logrotate для поворота audit.log, когда файл достигает определенного размера.
Проблема:
Я сталкиваюсь с тем, что, когда logrotate вращает файл audit.log на audit.log.1, log4j продолжает писать в audit.log.1, кроме записи в audit.log.
Возможные подходы:
-
Я знаю, что я могу использовать rollfileappender для вращения журнала, кроме использования logrotate, поэтому, когда rollfileappender закачивает файл, он переключается на новый файл без проблем. Но причина, по которой я не могу использовать rollfileappender, заключается в том, что я хочу использовать функцию поворота postrotate после запуска, когда запускаются некоторые скрипты, которые не могут быть предоставлены функцией rollfileappender.
-
Другим отчаянным способом, о котором я могу думать, является написать собственный пользовательский файл log4j, чтобы закрыть файл журнала (audit.log.1) и открыть новый (audit.log), когда он обнаруживает, что файл повернут,
-
Я никогда не использовал ExternallyRolledFileAppender, но если можно использовать post rotateFileAppender, чтобы отправить сигнал в ExternallyRolledFileAppender и сделать log4j осведомленным о том, что файл повернут и начать запись в новый файл?
Вопрос:
Просто интересно, есть ли какой-нибудь appender, который уже был изобретен/написан? или у меня есть другие варианты для решения этой проблемы?
Ответы
Ответ 1
Проверьте logrotate
copytruncate
вариант, это может помочь вашему делу:
copytruncate
Truncate the original log file to zero size in place
after creating a copy, instead of moving the old log
file and optionally creating a new one. It can be
used when some program cannot be told to close its
logfile and thus might continue writing (appending) to
the previous log file forever. Note that there is a
very small time slice between copying the file and
truncating it, so some logging data might be lost.
When this option is used, the create option will have
no effect, as the old log file stays in place