2016-10-02 25 views
0

我有Java應用程序使用Log4j 1.2.17,並在Debian系統下工作。我使用Linux日誌引擎來定期重命名日誌文件。但是,Log4j繼續寫入重命名的文件,但不會創建新的文件。 (也許它保留文件描述符)。 我的問題如下:如何將log4j擴展爲添加這樣的新功能 - 在現有的文件被重命名時寫入新文件。如何強制Log4j寫入新文件當現有的一個被重命名

謝謝

西蒙

回答

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」)