Javaのjava.util.loggingでログ出力を設定ファイルで制御する
ロガーの設定を外部のプロパティファイル(構成ファイル)から与えることができる。
loggerインスタンスを作成する度にコード内で設定を記述するのは非効率であり、ログレベル等の変更をするにもリビルドが必要になってしまう。
プロパティファイルを利用すれば、上記の問題を解決できる。
標準出力へログ出力するハンドラを定義
標準出力へログ出力するハンドラを通常のクラスとして定義する。
ログレベルの設定は、プロパティファイルで行うので指定不要。
1 2 3 4 5 6 7 8 9 10 11 12 13 | package logging.test; import java.util.logging.StreamHandler; /* * 標準出力へログ出力するハンドラ */ public class StdOutHandler extends StreamHandler { { //標準出力への出力設定 setOutputStream(System.out); } } |
プロパティファイルを作成する
ハンドラの指定、ルートロガーのログレベル設定、標準出力ハンドラの設定、SimpleFormatterのフォーマット変更を記述し、実行コードと同じディレクトリに配置する。
1 2 3 4 5 6 7 8 | #Specified handler handlers= logging.test.StdOutHandler #Log level setting of the root logger .level= ALL #Setting the standard output handler logging.test.StdOutHandler.level = ALL #Format change of SimpleFormatter java.util.logging.SimpleFormatter.format=%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS.%1$tL %4$s [%3$s] %5$s (%2$s) %6$s%n |
ログを標準出力へ出力する
定義しておいたプロパティファイルを読み込んで、ログ出力を行う。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package logging.test; import java.io.IOException; import java.util.logging.LogManager; import java.util.logging.Logger; public class StandardOutput { public static void main(String[] args) { // プロパティファイルの読み込み try { LogManager.getLogManager().readConfiguration(StandardOutput.class.getResourceAsStream("customLog.properties")); } catch (SecurityException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // Loggerクラスのインスタンスを生成 Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME); // ログ出力 logger.fine("ログ出力テスト:fine"); logger.info("ログ出力テスト:info"); logger.severe("ログ出力テスト:severe"); } } |