Как отложить именование файла, записанного log4j2, до момента открытия файла? - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь, чтобы log4j2 записывал файлы журнала с именами YYYYmmdd-HHMMSS.log, но не начинаю писать файл, пока у нас не будет хорошего системного времени (> 1986 год). У меня есть приложение, работающее в системе, которое загружается и требует времени, чтобы получить правильное время; пока это не произойдет, система думает, что это было в 1970 году, и на самом деле нет смысла писать файл журнала с заданной датой.

Используя пользовательский фильтр, я могу заставить FileAppender не записывать какие-либо события, пока системное время установлено. Я могу заставить FileAppender не открывать файл, пока пользовательский фильтр не передаст первое событие (createOnDemand = "true"). Используя Log4J2 - назначая имя файла appender во время выполнения , я могу получить файл с именем YYYYmmdd-HHMMSS.log, но файл YYYYmmdd-HHMMSS.log в конфигурации XML, похоже, оценивается при инициализации log4j2 ( не при открытии файла), поэтому мое имя файла все еще 19700101-000000.log.

Есть ли способ отложить оценку имени для log4j2 FileAppender до тех пор, пока файл фактически не будет открыт? В качестве альтернативы, есть хитрый способ использовать RollingFileAppender для этого? (Я не вижу способа изменить имя файла текущего файла, только старые файлы)

Я мог бы сделать пользовательский appender (FileAppender / FileManager просто не такой длинный), но я пытаясь избежать этого, если это возможно.

1 Ответ

0 голосов
/ 05 февраля 2020

Получил ответ в списке рассылки log4j2. Спасибо за Ральфа Гоерса (один из разработчиков log4j2). Используйте отфильтрованный RoutingAppender, чтобы отложить создание файла appender.

https://lists.apache.org/thread.html/rbf909f616a053f8c34733801b4977f389a31169ffcdcd3748d7873df%40%3Clog4j-user.logging.apache.org%3E

...