SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

サイズと日付でローテートするLog4jのAppender作成

開発現場の要求に即した独自Appenderの作成


  • X ポスト
  • このエントリーをはてなブックマークに追加

CompositeRollingFileAppenderのコンパイル

 CompositeRollingFileAppenderのコンパイル例を以下に示します。

javac -classpath log4j-1.2.13.jar -d classes
 src/org/apache/log4j/CompositeRollingFileAppender.java

 コンパイルを実行すると2つのクラスファイルが生成されます(1つは内部クラスです)。

アプリケーションへの組み込み方法

 サンプルファイルには上記のソースファイル「CompositeRollingFileAppender.java」および、そのソースをコンパイルしてできるクラスファイルを「log4j-1.2.13.jar」に加えた、「log4j-1.2.13-ext.jar」などが格納されています。

 CompositeRollingFileAppenderを利用する場合は「log4j-1.2.13-ext.jar」をシステムのクラスパスに加えてください(log4j-1.2.xx.jarは加える必要ありません)。

 なお、「log4j.xml」(もしくは「log4j.properties」)をLog4jの設定ファイルとして読み込ませるには、実行時のクラスパスに含める方法が簡単でしょう。以下に、サンプルアプリケーションを実行するためのコマンド例を示します(「log4j.xml」は「classes」フォルダに格納されているものとします)。

コマンド例
java -cp classes;lib/log4j-1.2.13-ext.jar
 jp.co.okisoft.esc.log4j.RollingSample

サンプル実行

 サンプルファイルに含まれる「run.bat」を実行すると、「log」フォルダにログファイルが生成され、サイズと日付によるローテーションの様子を確認できます(サンプルの「log4j.xml」ではローテーションの様子を早く確認するために、MaxFileSizeを「10KB」、MaxBackupIndexを「10」、DatePatternを「'.'yyyy-MM-dd-HH-mm」として、分単位でローリングを行う設定にしてあります)。

実行確認

 「log」フォルダには、例えば次のようなログファイルが生成されます。

ログファイル生成例
ログファイル生成例

サイズベースのローテーション

 サイズベースのローテーションが発生すると、日付が付けられていないログファイルを対象としてローテーションを行います。例えば、以下のログファイルが出力されている状態でサイズベースのローテーションが発生すると、

 次のようにローテーションされます。

 ローテーションによってファイル名が変更されたファイルを赤の点線で囲っています。サイズベースのローテーションではファイル名末尾の「Index」が1づつ増えます。ですので、Indexが大きいほど古いファイル、Indexが付いていないファイル(この例では「sample.log」)が一番新しいファイルということになります。

日付ベースのローテーション

 日付ベースのローテーションでも、日付が付けられていないログファイルを対象としてローテーションを行います。例えば、以下のログファイルが出力されている状態で日付ベースのローテーションが発生すると、

 次のようにローテーションされます。

MaxBackupIndexに基づくログファイルの削除

 ローテーションによりバックアップログファイル数がMaxBackupIndexを超えた場合は、最も古いログファイルが削除されます。例えば、以下のログファイルが出力されている状態でサイズベースのローテーションが発生すると、

 最も古いログファイル(「sample.log.2006-07-24-22-48」)が削除され、その後サイズベースのローテーションが行われて、ログファイルは次のようになります。

まとめ

 既存のRollingFileAppenderDailyRollingFileAppenderを組み合わせて、サイズと日付でローテーションするAppenderについて紹介しました。

 本稿執筆のきっかけになったのは、開発現場からの要求でした。サイズと日付でローテーションするAppenderについて調べてみると、Log4j 1.2.13の媒体にKevin Steppe氏によるAppenderが寄贈されているのを知りました。

 ですがそのAppenderも開発現場の要求を完全に満たすものではなかったため、RollingFileAppenderDailyRollingFileAppenderをベースに新規にAppenderを作成し、この記事を執筆するに至っています。

 本Appenderの作成において、Kevin Steppe氏のAppenderがとても参考になったことを付け加えておきます。

 本稿執筆時点ではまだ正式リリースされていませんが、Log4j 1.3がもうじきリリースされると思います(2006/10/02現在、Log4j 1.3 alpha-8)。Log4j 1.3ではローテーションの仕組みが改善されていますが、それでも本稿で紹介したローテーションを実現するには、独自の作りこみが必要になるようです。

 開発現場の要求はさまざまで今後こういった独自のAppenderを作成する必要が出てくるかもしれません。その場合に、この記事が参考になれば幸いです。

参考資料

  1. Apache Logging Services Project Log4J(本家のページ)
  2. Log4j Q&A(筆者が管理しているページで、他の参考文献も紹介しています)

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

小川 浩司(オガワ ヒロシ)

Eclipseに関する情報Log4j Q&A等を書いています。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/524 2006/12/08 20:04

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング