Файловые системы обычно синхронизируются операционной системой, поэтому вы можете просто удалить файл, не беспокоясь о блокировках или чем-либо еще.В зависимости от того, как log4j блокирует файл, процесс удаления может произойти сбой, и вам нужно добавить цикл повторения.
int attempts = 3;
final File logfile = new File(theLogFilePath);
while ((attempts > 0) && logfile.exists() && !logfile.delete()) {
--attempts;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
attempts = 0;
}
}
Это не совсем чистый код, но то, что вы делаете, не чистов любом случае.;)
Вы довольно грубо вмешиваетесь в процесс регистрации, но так как пользователь также может удалить этот файл в любое время, log4j должен справиться с этим изящно.В худшем случае я предполагаю, что сообщение, которое должно было быть зарегистрировано, будет потеряно, но это, вероятно, не проблема, учитывая, что вы в любом случае просто удалите файл журнала.
Для более чистой реализации см. thisвопрос .