2016-10-02 19 views
0

Log4j 1.2.17を使用するJavaアプリケーションがあり、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」)

関連する問題