#log4j
#log4j
Вопрос:
У меня есть Java-приложение, которое использует Log4j 1.2.17 и работает в системе Debian. Я использую механизм регистрации Linux для периодического переименования файлов журналов. Но Log4j продолжает записывать в переименованный файл, но не создает новый для записи. (Возможно, он сохраняет дескриптор файла). Мой вопрос заключается в следующем: как расширить log4j для добавления такой новой функциональности — записи в новый файл при переименовании существующего.
Спасибо,
Саймон
Ответ №1:
Я нашел альтернативное решение. Я подготовил поток, который периодически проверяет наличие исходного файла журнала (например, каждые 1 минуту). Как только он отсутствует, поток перенастраивает приложение так, чтобы оно создавало и использовало первоначально определенный файл для ведения журнала. Я использую следующий метод для упомянутого выше действия.
protected void checkLogFile(){
Enumeration<?> e = Logger.getRootLogger().getAllAppenders();
while (e.hasMoreElements()) {
Appender appender = (Appender) e.nextElement();
if (FileAppender.class.isInstance(appender)) {
FileAppender fa = (FileAppender) appender;
String fileName = fa.getFile();
File logFile = new File(fileName).getAbsoluteFile();
logger.debug("check logFile = " logFile);
if (!logFile.exists()) {
logger.debug("logFile is not exist. create a new log file: " fileName);
fa.setFile(fileName);
fa.activateOptions();
}
}
}
}
Пожалуйста, обратите внимание, что исходный файл журнала определяется в конфигурации log4j по относительному пути (например, ‘../log/proc.log’)