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





Проблема заключалась в том, что приложения завершенных процессов не удалялись, поэтому файлы журналов для этих процессов оставались заблокированными и освобождались только после перезапуска всего приложения. Мое решение заключалось в удалении соответствующего приложения после завершения процесса.
Configuration conf = ((LoggerContext) LogManager.getContext(false)).getConfiguration();
RoutingAppender app = (RoutingAppender) conf.getAppender("dynamic appender name");
app.deleteAppender("appender responsible for the completed process");