サイズに基づいてログローテーションを作成するには、RollingFileAppender
でLog4jを使用します。
ローテーションする前に、一定量のtimeで各ファイルにログを記録するように設定するにはどうすればよいですか?
たとえば、各ログファイルに1時間のログが含まれるように、各時間の先頭でローテーションしますか?
Java Properties
オブジェクトを使用して(log4j.properties
ファイルではなく)を使用して)プログラムでLog4jを構成します。
あなたはおそらく DailyRollingFileAppender を使いたいでしょう。たとえば、1時間ごとにロールするには、'.'yyyy-MM-dd-HH
のDatePatternを使用します。 log4j.propertiesファイルの場合:
log4j.appender.myAppender=org.Apache.log4j.DailyRollingFileAppender
log4j.appender.myAppender.DatePattern='.'yyyy-MM-dd-HH
...
または、プログラムによる構成の場合:
DailyRollingFileAppender appender = new DailyRollingFileAppender();
appender.setDatePattern("'.'yyyy-MM-dd-HH");
Logger root = Logger.getRootLogger();
root.addAppender(appender);
残念ながら、DailyRollingFileAppenderを使用すると、ファイルサイズを制限できないことになります。これは、指定されたロール期間内に大量のログがある場合に問題になる可能性があります。
さらに、
log4j.appender.myAppender=org.Apache.log4j.DailyRollingFileAppender
**log4j.appender.myAppender.DatePattern='.'yyyy-MM-dd-HH**
次のリストは、log4jで定義されているすべての日付パターンを示しています。
Minutely '.'yyyy-MM-dd-HH-mm application.log.2013-02-28-13-54
Hourly '.'yyyy-MM-dd-HH application.log.2013-02-28-13
Half-daily '.'yyyy-MM-dd-a application.log.2013-02-28-AM app.log.2013-02-28-PM
Daily '.'yyyy-MM-dd application.log.2013-02-28
Weekly '.'yyyy-ww application.log.2013-07 app.log.2013-08
Monthly '.'yyyy-MM application.log.2013-01 app.log.2013-02
ローリングファイルアペンダーで注意すべきもう1つのことは、特定のログファイルに一度にアクセスするJVMが1つだけであることを確認することです。これは、log4jがパフォーマンス上の理由でログファイルのサイズをキャッシュするためです。また、複数のJVMが同じファイルにアクセスすると、「ローリング」が不安定になります。
DailyRollingFileAppender を使用します。
特に、「datePattern」プロパティを'.'yyyy-MM-dd-HH
に設定すると、ファイルが1時間ごとにローテーションします。
DailyRollingFileAppender を使用する必要があります。その誤解を招く名前にもかかわらず、構成可能な時間間隔で実行するように構成できます。