2017-01-31 6 views
0

logback.groovyファイルで設定されたlogbackを使用して、アプリケーションのログを管理しています。私はしたい:1つのログファイルを使用して古いログファイルを削除するLogback FileAppender

  1. アプリケーションの起動時にタイムスタンプを付けられ、アプリケーションの寿命のための単一のログファイルとして保持されるログファイルを作成します。 (アプリケーションの複数のインスタンスが同時に実行されている場合や、複数のインスタンスが1日のうちに実行され、数日間実行されている場合があります)。
  2. クリーンなログファイルディレクトリを保持します。指定された期間より古いものは削除されます。

最初を達成することは、次の線に沿って、FileAppenderを使用することをお勧めし - しかし、これは古いログファイルを削除しません:

appender("FILE", FileAppender) { 
    file = "path/to/log/dir/log_file_${date}.log" 
} 

は、第二の達成TimeBasedRollingPolicyRollingFileAppenderを使用することをお勧めし、ログファイルを7日間保存する次の行に沿って説明します。の利益を得る - すなわち、私は私のケーキを持つことができますどのように

appender("FILE", RollingFileAppender) { 
    rollingPolicy(TimeBasedRollingPolicy) { 
     fileNamePattern = "path/to/log/dir/log_file_%d{yyyyMMdd}.log" 
     maxHistory = 7; 
    } 
} 

をし、それを食べる:しかし、これは、アプリケーションが実行されたときに関係なく、指定した日にアプリケーションのすべてのインスタンスを記録するための1つのファイルを使用します。アプリケーションごとに1つのログファイル(起動時のタイムスタンプ付き)が、RollingFileAppender/TimeBasedRollingPolicyの履歴クリーンアップの利点を備えていますか?

答えて

0

それが有用である可能性がある限り、人は次の行に沿って、カスタムFileAppenderを作成することによってこれを行うことができます。

public class TidyFileAppender<E> extends FileAppender<E> { 

    protected File directory; 

    @Override 
    public void start() { 
    if (conditions to determine historical files to be deleted) { 
     File[] oldFiles = directory.listFiles(new FileFilter() { 
     @Override 
     public boolean accept(File file) { 
      // return true if file is 'old' 
     } 
     }); 
     if (oldFiles != null) { 
     for (File oldFile : oldFiles) { 
      if (!oldFile.delete()) { 
      addWarn("Failed to delete old log file: " + oldFile); 
      } 
     } 
     } 
    } else { 
     addWarn("Cannot tidy historical logs..."); 
    } 
    super.start(); 
    } 
} 
関連する問題