Контекст:
Я хочу использовать 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, который уже был изобретен/написан? или у меня есть другие варианты для решения этой проблемы?