0
我有Java應用程序使用Log4j 1.2.17,並在Debian系統下工作。我使用Linux日誌引擎來定期重命名日誌文件。但是,Log4j繼續寫入重命名的文件,但不會創建新的文件。 (也許它保留文件描述符)。 我的問題如下:如何將log4j擴展爲添加這樣的新功能 - 在現有的文件被重命名時寫入新文件。如何強制Log4j寫入新文件當現有的一個被重命名
謝謝
西蒙
我有Java應用程序使用Log4j 1.2.17,並在Debian系統下工作。我使用Linux日誌引擎來定期重命名日誌文件。但是,Log4j繼續寫入重命名的文件,但不會創建新的文件。 (也許它保留文件描述符)。 我的問題如下:如何將log4j擴展爲添加這樣的新功能 - 在現有的文件被重命名時寫入新文件。如何強制Log4j寫入新文件當現有的一個被重命名
謝謝
西蒙
我已經找到了替代的解決方案。我準備了定期檢查原始日誌文件是否存在的線程(例如,每隔1分鐘)。只要它不存在,線程就會重新配置appender,以便它將創建並使用最初定義的文件進行日誌記錄。 我使用以下方法提到上述操作。
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」)