#log4j #log4j2 #slf4j
#log4j #log4j2 #slf4j
Вопрос:
Я использую lsf4j поверх log4j для регистрации событий в моем приложении. У меня есть пользовательское приложение для добавления файлов, которое используется для записи событий в файлы журналов multipule, основной файл журнала и файл журнала для каждого экземпляра процесса, которым управляет мое приложение. У меня также есть запланированная задача очистки, которая выполняется параллельно, и ее цель — очистить все файлы журнала завершенных процессов, но при попытке удалить эти файлы выдается следующая ОШИБКА: «Процесс не может получить доступ к файлу, поскольку он используется другим процессом».. Если я перезапущу свое приложение, эти файлы будут удалены при выполнении задачи очистки, следовательно, причина в том, что блокировка, установленная log4j, снимается только при перезапуске. Мне нужен способ программно снять блокировку с файла журнала, учитывая его имя.
Ответ №1:
Проблема заключалась в том, что приложения завершенных процессов не были удалены, и, таким образом, файлы журналов для этих процессов оставались заблокированными и освобождались только при перезапуске всего приложения. Моим решением было удаление соответствующего приложения по завершении процесса.
Configuration conf = ((LoggerContext) LogManager.getContext(false)).getConfiguration();
RoutingAppender app = (RoutingAppender) conf.getAppender("dynamic appender name");
app.deleteAppender("appender responsible for the completed process");