我的Java应用程序使用Log4j 1.2.17并在Debian系统下运行。我使用Linux logrolling引擎定期重命名日志文件。但是,Log4j继续写入重命名的文件但不创建要写入的新文件。 (也许它保留了文件描述符)。 我的问题如下:如何将log4j扩展为添加这样的新功能 - 在重命名现有文件时写入新文件。
谢谢,
西蒙
答案 0 :(得分:0)
我找到了替代解决方案。我准备了定期检查原始日志文件存在的线程(例如每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')