株式会社イーヴ

EeBlog(テクニカルブログ)

TOP > EeBlog > 第64回 ロギングその3

第64回 ロギングその3

引き続き「ロギング」をテーマにしていきます。

前回、FileHandlerを使用することで、ログをファイルに出力することができました。
しかし、XMLフォーマットで出力されるといった不満もありました。
今回はそのあたりを改善していきましょう。

ログのフォーマットを変更する場合、Handlerに設定されているFormatterを変更します。
今回はFileHandlerのデフォルトのXMLFormatterからSimpleFormatterに変更します。
これによりコンソールの出力と同じフォーマットでログが出力されます。
逆に考えると、ConsoleHandlerのデフォルトがSimpleFormatterということですね。

また、前回のサンプルでは、毎回ログファイルを上書きしてしまっていました。
ログファイルを上書きではなく追記にする場合、コンストラクタで指定します。
今回はそれに加えて、ログの肥大化を防ぐためにローテートの設定も行います。
それらもコンストラクタの引数で指定することができます。

以下のサンプルコードでは、匿名Loggerオブジェクトを作ってログ出力をしています。
プログラムを実行すると同じフォルダにログファイルが作成されます。(J2SE1.4以上対応)

import java.util.logging.FileHandler;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import java.util.logging.SimpleFormatter;


 public class HandlerTest {
     public static void main(String[] args) throws Exception {


         FileHandler fileHandler = null;
         String pattern = "HandlerTest.log";// 出力ファイルの名前付けのパターン
        int limit = 10000;// 任意の 1 つのファイルに書き込む最大バイト数
        int count = 3;// 使用するファイル数
        boolean append = true;// 追加モードを指定する


        try {
             // 追記モードでFileHandler作成
            fileHandler = new FileHandler(pattern, limit, count, append);


             // ログフォーマット変更
            fileHandler.setFormatter(new SimpleFormatter());


             // 匿名Logger取得
            Logger logger = Logger.getAnonymousLogger();


             // Loggerのログレベル指定
            logger.setLevel(Level.ALL);


             // LoggerにHandler追加
            logger.addHandler(fileHandler);


             // ログ出力
            logger.severe("SEVERE は重大な障害を示すメッセージレベルです。 ");
             logger.warning("WARNING は潜在的な問題を示すメッセージレベルです。 ");
             logger.info("INFO はメッセージを情報として提供するメッセージレベルです。 ");
             logger.config("CONFIG は静的な構成メッセージのメッセージレベルです。");
             logger.fine("FINE はトレース情報を提供するメッセージレベルです。 ");
             logger.finer("FINER はかなり詳細なトレースメッセージを示します。 ");
             logger.finest("FINEST は非常に詳細なトレースメッセージを示します。 ");


         } finally {
             if (fileHandler != null) {
                 fileHandler.close();
             }
         }
     }
 }

読みやすい形でファイルに追記されているのが確認できますね。
また何回もプログラムを実行すれば、ログのローテートも確認できるでしょう。