снять блокировку с файла журнала log4j после завершения процесса - PullRequest
0 голосов
/ 04 марта 2019

Я использую lsf4j поверх log4j для записи событий в моем приложении.У меня есть пользовательский файл appender, который используется для регистрации событий для умножения файлов журнала, основной файл журнала и файл журнала для каждого экземпляра процесса, которым управляет мое приложение.У меня также есть запланированная задача очистки, которая выполняется параллельно, и ее цель - очистить все файлы журналов завершенных процессов, но при попытке удалить эти файлы выдается следующее ОШИБКА: «Процесс не может получить доступ к файлу, поскольку он используется другимпроцесс.".Если я перезапускаю свое приложение, эти файлы очищаются при запуске задачи очистки, поэтому причина в том, что блокировка, установленная log4j, снимается только после перезапуска.Мне нужен способ, чтобы программно снять блокировку файла журнала, учитывая его имя.

1 Ответ

0 голосов
/ 10 марта 2019

Проблема заключалась в том, что дополнители завершенных процессов не удалялись, и, таким образом, файлы журнала для этих процессов оставались заблокированными и освобождались только после перезапуска всего приложения.Мое решение состояло в том, чтобы удалить соответствующего аппендиата после завершения процесса.

Configuration conf = ((LoggerContext) LogManager.getContext(false)).getConfiguration();
RoutingAppender app = (RoutingAppender) conf.getAppender("dynamic appender name");
app.deleteAppender("appender responsible for the completed process");
...