Javaのjava.util.loggingでログを標準出力に出力する
標準APIであるjava.util.loggingを利用してログを出力する場合、通常はログがエラー出力に出力される。
これはデフォルトのログ設定ファイルの設定上、ルートロガーのハンドラがConsoleHandlerとなっており、ConsoleHandlerはエラー出力を使う仕様になっている為。
ログの出力先を標準出力に変更するには、別途ハンドラを定義する必要がある。
標準出力へログ出力するハンドラを定義
標準出力へログ出力するハンドラを通常のクラスとして定義する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package logging.test; import java.util.logging.Level; import java.util.logging.StreamHandler; /* * 標準出力へログ出力するハンドラ */ public class StdOutHandler extends StreamHandler { { // 標準出力への出力設定 setOutputStream(System.out); // ログレベルの設定(ALLに設定しないとログレベルをコントロールできない) setLevel(Level.ALL); } } |
ログを標準出力へ出力する
定義しておいた標準出力へログ出力するハンドラをロガーに追加して、ログ出力を行う。
その際、デフォルトのログ設定ファイルで管理されているルートロガーのハンドラ(ConsoleHandler)へログメッセージを発行しないように制御しないとエラー出力、標準出力それぞれにログが出力される。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package logging.test; import java.util.logging.Level; import java.util.logging.Logger; public class StandardOutput { public static void main(String[] args) { // Loggerクラスのインスタンスを生成 Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME); // 標準出力へログを出力するハンドラを追加 logger.addHandler(new logging.test.StdOutHandler()); // ルートロガーのハンドラ(ConsoleHandler)へログメッセージを発行しない logger.setUseParentHandlers(false); // ログレベル設定 logger.setLevel(Level.ALL); // ログ出力 logger.fine("ログ出力テスト:fine"); logger.info("ログ出力テスト:info"); logger.severe("ログ出力テスト:severe"); } } |