株式会社イーヴ

EeBlog(テクニカルブログ)

TOP > EeBlog > 第69回 ロギングその8

第69回 ロギングその8

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

今回はログファイルのフォーマットを独自のものに変えてみましょう。 独自フォーマットを作るには、Formatterクラスを拡張します。

以下は独自フォーマットのサンプルとテストプログラムです。 プログラムを実行すると同じフォルダにログファイルが作成されます。(J2SE1.4以上対応)

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

今回はログファイルのフォーマットを独自のものに変えてみましょう。 独自フォーマットを作るには、Formatterクラスを拡張します。

以下は独自フォーマットのサンプルとテストプログラムです。 プログラムを実行すると同じフォルダにログファイルが作成されます。(J2SE1.4以上対応)

import java.util.logging.Formatter;
 import java.util.logging.Level;
 import java.util.logging.LogRecord;

 public class MyFormatter extends Formatter {

     @Override
     public synchronized String format(LogRecord record) {

         // 各出力項目
        long time = record.getMillis();
         Level level = record.getLevel();
         String className = record.getSourceClassName();
         String methodName = record.getSourceMethodName();
         String message = formatMessage(record);

         // 文末の改行文字
        String lineSeparator = System.getProperty("line.separator");

         // 「年月日 時刻 レベル クラス メソッド メッセージ」の形式
        return String.format("%tF %
import java.util.logging.FileHandler;
 import java.util.logging.Level;
 import java.util.logging.Logger;

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

         FileHandler fileHandler = null;
         String pattern = "MyFormatterTest.log";// 出力ファイルの名前付けのパターン
        boolean append = true;// 追記モードを指定する

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

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

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

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

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

             // ログ出力
            logger.severe("SEVERE は重大な障害を示すメッセージレベルです。");
             logger.warning("WARNING は潜在的な問題を示すメッセージレベルです。");
             logger.info("INFO はメッセージを情報として提供するメッセージレベルです。");

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

SimpleFormatterでの出力を一行で表示したような感じになります。
例外が存在した場合にも対応すると、もっと実用的になるでしょう。