【Java】標準 java.util.logging を使ったログ機能 ~ログフォーマットしてテキスト形式でログファイル出力するには~

はじめに

http://blogs.yahoo.co.jp/dk521123/33200747.html
の「サンプル : ログフォーマット変更」で、
ログフォーマットして、ログファイルを出力したら、XML形式で出力されてしまったので
ログフォーマットしてテキスト形式でログファイル出力する方法を調べてみた。

サンプル

 * ちなみに、設定ファイルは不要です

ログフォーマット:CustomLogFormatter.java

* SimpleFormatterを継承させる
package com.log;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.SimpleFormatter;

public class CustomLogFormatter extends SimpleFormatter {
   private final SimpleDateFormat dateFormat =
         new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

   public String format(LogRecord logRecord) {
      final StringBuffer stringBuffer = new StringBuffer();

      stringBuffer.append(this.dateFormat.format(new Date(logRecord.getMillis())));
      stringBuffer.append(" ");

      Level level = logRecord.getLevel();
      if (level == Level.FINEST) {
         stringBuffer.append("FINEST");
      } else if (level == Level.FINER) {
         stringBuffer.append("FINER ");
      } else if (level == Level.FINE) {
         stringBuffer.append("FINE ");
      } else if (level == Level.CONFIG) {
         stringBuffer.append("CONFIG");
      } else if (level == Level.INFO) {
         stringBuffer.append("INFO ");
      } else if (level == Level.WARNING) {
         stringBuffer.append("WARN ");
      } else if (level == Level.SEVERE) {
         stringBuffer.append("SEVERE");
      } else {
         stringBuffer.append(Integer.toString(logRecord.getLevel().intValue()));
         stringBuffer.append(" ");
      }
      stringBuffer.append(" ");
      stringBuffer.append(logRecord.getLoggerName());
      stringBuffer.append(" - ");
      stringBuffer.append(logRecord.getMessage());
      stringBuffer.append("\n");

      return stringBuffer.toString();
   }
}

SampleLogger.java

* SimpleFormatterを継承させる
package com.log;

import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;

public class SampleLogger {
   public static void main(final String[] args) throws SecurityException, IOException {
      final Logger logger = Logger.getLogger("SampleLogger");

      FileHandler fileHandler = new FileHandler(
            "SampleLogging%u.%g.log", // 出力ログファイル名は"SampleLogging.log
            10000,                    // 最大バイト数
            10,                       // ログファイル数
            true);                    // 追加モード
      // テキスト形式で、CustomLogFormatterを設定
      fileHandler.setFormatter(new CustomLogFormatter()); // ログフォーマット設定
      // ログの出力先を追加
      logger.addHandler(fileHandler);
      // ログの出力レベルを設定(ここではすべて出力するように設定)
      logger.setLevel(Level.ALL);
      
      logger.finest("Hellow World1");
      logger.finer("Hellow World2");
      logger.fine("Hellow World3");
      logger.config("Hellow World4");
      logger.info("Hellow World5");
      logger.warning("Hellow World6");
      logger.severe("Hellow World7");
   }
}

出力結果

SampleLogging0.0.log

2014-03-22 23:12:52.906 FINEST SampleLogger - Hellow World1
2014-03-22 23:12:52.906 FINER  SampleLogger - Hellow World2
2014-03-22 23:12:52.906 FINE  SampleLogger - Hellow World3
2014-03-22 23:12:52.906 CONFIG SampleLogger - Hellow World4
2014-03-22 23:12:52.906 INFO  SampleLogger - Hellow World5
2014-03-22 23:12:52.937 WARN  SampleLogger - Hellow World6
2014-03-22 23:12:52.937 SEVERE SampleLogger - Hellow World7


関連記事

標準 java.util.logging を使ったログ機能 ~標準出力編~

http://blogs.yahoo.co.jp/dk521123/33200578.html

標準 java.util.logging を使ったログ機能 ~ログファイル出力 / ログフォーマット変更 編~

http://blogs.yahoo.co.jp/dk521123/33200747.html

SSLログ や SOAPログ などのコンソールログをファイル出力に変更するには...

http://blogs.yahoo.co.jp/dk521123/36689096.html