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


サンプル : ログファイル出力

以下の関連記事のサンプル「サンプル:「finest」~「severe」が出力(設定ファイル使用)」で
設定ファイルを変更するだけなので、サンプルプログラムは省略。
http://blogs.yahoo.co.jp/dk521123/33200578.html

logger.properties

* 出力ログファイル名「SampleLoggingX.X.log」、ログ・ローテーションの上限個数は10個
* 「handlers=java.util.logging.ConsoleHandler, java.util.logging.FileHandler」がポイント
handlers=java.util.logging.ConsoleHandler, java.util.logging.FileHandler
.level=FINEST

java.util.logging.FileHandler.level=FINEST
java.util.logging.FileHandler.pattern=SampleLogging%u.%g.log
java.util.logging.ConsoleHandler.formatter=com.log.CustomLogFormatter
java.util.logging.FileHandler.limit=10000000
java.util.logging.FileHandler.count=10
java.util.logging.FileHandler.append=true
java.util.logging.FileHandler.encoding=UTF-8

参考文献

FileHandlerについて

http://struts.wasureppoi.com/util/04_file_handler.html

サンプル : ログフォーマット変更

CustomLogFormatter.java

package com;

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

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

   @Override
   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();
   }
}

logger.properties

handlers=java.util.logging.ConsoleHandler, java.util.logging.FileHandler
.level=FINEST

java.util.logging.ConsoleHandler.level=FINEST
java.util.logging.ConsoleHandler.formatter=com.CustomLogFormatter

java.util.logging.FileHandler.level=FINEST
java.util.logging.FileHandler.pattern=SampleLogging%u.%g.log
java.util.logging.ConsoleHandler.formatter=com.CustomLogFormatter
java.util.logging.FileHandler.count=10

SampleLogger.java

package com;

import java.io.IOException;
import java.io.InputStream;
import java.util.logging.LogManager;
import java.util.logging.Logger;

public class SampleLogger {
   private static final String LOGGING_PROPERTIES = "logger.properties";

   static {
      InputStream inStream = null;
      try {
         ClassLoader classLoader = SampleLogger.class.getClassLoader();
         inStream = classLoader.getResourceAsStream(LOGGING_PROPERTIES);
         LogManager.getLogManager().readConfiguration(inStream);
      } catch (Exception ex) {
         ex.printStackTrace();
      } finally {
         if (inStream != null) {
            try {
               inStream.close();
            } catch (IOException e) {
               e.printStackTrace();
            }
         }
      }
   }

   public static void main(final String[] args) {
      final Logger logger = Logger.getLogger("SampleLogger");
      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");
   }
}

出力結果

コンソール出力

2014-03-21 22:52:01.109 FINEST SampleLogger - Hellow World1
2014-03-21 22:52:01.203 FINER  SampleLogger - Hellow World2
2014-03-21 22:52:01.203 FINE  SampleLogger - Hellow World3
2014-03-21 22:52:01.203 CONFIG SampleLogger - Hellow World4
2014-03-21 22:52:01.203 INFO  SampleLogger - Hellow World5
2014-03-21 22:52:01.203 WARN  SampleLogger - Hellow World6
2014-03-21 22:52:01.203 SEVERE SampleLogger - Hellow World7

SampleLogging0.0.log

* XMLファイル形式で出力される!!!?(テキスト形式で出力方法は、下記の関連記事を参照のこと)
<?xml version="1.0" encoding="windows-31j" standalone="no"?>
<!DOCTYPE log SYSTEM "logger.dtd">
<log>
<record>
  <date>2014-03-21T22:52:01</date>
  <millis>1395409921109</millis>
  <sequence>0</sequence>
  <logger>SampleLogger</logger>
  <level>FINEST</level>
  <class>com.log.SampleLogger</class>
  <method>main</method>
  <thread>1</thread>
  <message>Hellow World1</message>
</record>
<record>
  <date>2014-03-21T22:52:01</date>
  <millis>1395409921203</millis>
  <sequence>1</sequence>
  <logger>SampleLogger</logger>
  <level>FINER</level>
  <class>com.log.SampleLogger</class>
  <method>main</method>
  <thread>1</thread>
  <message>Hellow World2</message>
</record>
<record>
  <date>2014-03-21T22:52:01</date>
  <millis>1395409921203</millis>
  <sequence>2</sequence>
  <logger>SampleLogger</logger>
  <level>FINE</level>
  <class>com.log.SampleLogger</class>
  <method>main</method>
  <thread>1</thread>
  <message>Hellow World3</message>
</record>
<record>
  <date>2014-03-21T22:52:01</date>
  <millis>1395409921203</millis>
  <sequence>3</sequence>
  <logger>SampleLogger</logger>
  <level>CONFIG</level>
  <class>com.log.SampleLogger</class>
  <method>main</method>
  <thread>1</thread>
  <message>Hellow World4</message>
</record>
<record>
  <date>2014-03-21T22:52:01</date>
  <millis>1395409921203</millis>
  <sequence>4</sequence>
  <logger>SampleLogger</logger>
  <level>INFO</level>
  <class>com.log.SampleLogger</class>
  <method>main</method>
  <thread>1</thread>
  <message>Hellow World5</message>
</record>
<record>
  <date>2014-03-21T22:52:01</date>
  <millis>1395409921203</millis>
  <sequence>5</sequence>
  <logger>SampleLogger</logger>
  <level>WARNING</level>
  <class>com.log.SampleLogger</class>
  <method>main</method>
  <thread>1</thread>
  <message>Hellow World6</message>
</record>
<record>
  <date>2014-03-21T22:52:01</date>
  <millis>1395409921203</millis>
  <sequence>6</sequence>
  <logger>SampleLogger</logger>
  <level>SEVERE</level>
  <class>com.log.SampleLogger</class>
  <method>main</method>
  <thread>1</thread>
  <message>Hellow World7</message>
</record>
</log>


関連記事

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

* XMLファイル形式で出力されるので、テキスト形式で出力する方法を調べてみた
http://blogs.yahoo.co.jp/dk521123/33205569.html