web-dev-qa-db-ja.com

Log4jでサイズではなく時間に基づいてログファイルをローテーションする方法

サイズに基づいてログローテーションを作成するには、RollingFileAppenderでLog4jを使用します。

ローテーションする前に、一定量のtimeで各ファイルにログを記録するように設定するにはどうすればよいですか?

たとえば、各ログファイルに1時間のログが含まれるように、各時間の先頭でローテーションしますか?

Java Propertiesオブジェクトを使用して(log4j.propertiesファイルではなく)を使用して)プログラムでLog4jを構成します。

18
DivideByHero

あなたはおそらく 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を使用すると、ファイルサイズを制限できないことになります。これは、指定されたロール期間内に大量のログがある場合に問題になる可能性があります。

30
Rob Hruska

さらに、

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
3

ローリングファイルアペンダーで注意すべきもう1つのことは、特定のログファイルに一度にアクセスするJVMが1つだけであることを確認することです。これは、log4jがパフォーマンス上の理由でログファイルのサイズをキャッシュするためです。また、複数のJVMが同じファイルにアクセスすると、「ローリング」が不安定になります。

3
Nathan Feger

DailyRollingFileAppender を使用します。

特に、「datePattern」プロパティを'.'yyyy-MM-dd-HHに設定すると、ファイルが1時間ごとにローテーションします。

2
ChssPly76

DailyRollingFileAppender を使用する必要があります。その誤解を招く名前にもかかわらず、構成可能な時間間隔で実行するように構成できます。

0
Tendayi Mawushe