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

サンプル:はじめに

import java.util.logging.Logger;

public class SampleLogger {
    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");
    }
}

出力結果

* 「finest」~「config」が出力されないのは、「Java実行環境はデフォルト状態ではINFOレベルより下のレベルのログは出力されないようになっている」から
3 21, 2014 6:49:31 午後 com.log.SampleLogger1 main
情報: Hellow World5
3 21, 2014 6:49:31 午後 com.log.SampleLogger1 main
警告: Hellow World6
3 21, 2014 6:49:31 午後 com.log.SampleLogger1 main
重大: Hellow World7

サンプル:「finest」~「severe」が出力

import java.io.ByteArrayInputStream;
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_DATA =
         "handlers=java.util.logging.ConsoleHandler\n" + ".level=FINEST\n"
               + "java.util.logging.ConsoleHandler.level=FINEST\n"
               + "java.util.logging.ConsoleHandler.formatter"
               + "=java.util.logging.SimpleFormatter";

   static {
      InputStream inStream = null;
      try {
         inStream = new ByteArrayInputStream(LOGGING_PROPERTIES_DATA.getBytes("UTF-8"));
         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");
   }
}

出力結果

3 21, 2014 7:02:27 午後 com.log.SampleLogger1 main
最も詳細: Hellow World1
3 21, 2014 7:02:27 午後 com.log.SampleLogger1 main
詳細: Hellow World2
3 21, 2014 7:02:27 午後 com.log.SampleLogger1 main
普通: Hellow World3
3 21, 2014 7:02:27 午後 com.log.SampleLogger1 main
構成: Hellow World4
3 21, 2014 7:02:27 午後 com.log.SampleLogger1 main
情報: Hellow World5
3 21, 2014 7:02:27 午後 com.log.SampleLogger1 main
警告: Hellow World6
3 21, 2014 7:02:27 午後 com.log.SampleLogger1 main
重大: Hellow World7

サンプル:「finest」~「severe」が出力(設定ファイル使用)

準備

* 以下をやらないと、Eclipse環境下では、getResourceAsStream()から、nullが返ってくる
http://www.coderanch.com/t/104740/vc/Class-getResourceAsStream-returns-null-Eclipse
 [1] 設定ファイルを作成する
 [2] それをプロジェクト配下の適当な場所に置く
 [3] Eclipseで、プロジェクトを右クリックし、
    [Properties]-[Java Build Path]-[Libraries]-[Add Source Folder]で
  上記[2]のフォルダを指定する

[プロジェクト]
|  
+-conf
|  |  
|  +-logger.properties
|  
+-src
   |  
   +-com
      |  
      +-SampleLogger.java

logger.properties

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

java.util.logging.ConsoleHandler.level=FINEST
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter

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");
   }
}

出力結果

* 上と同じだから省略


関連記事

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

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