第66回 ロギングその5
引き続き「ロギング」をテーマにしていきます。
今回はLoggerの親子関係について学びます。
Loggerオブジェクトは他のLoggerオブジェクトに対して、親子関係を設定できます。
親子関係を設定することで、子Loggerは親Loggerから様々な属性を引き継ぐのです。
むしろ、有効な属性が見つかるまでさかのぼるといったほうが適切かもしれません。
以下のサンプルコードでは、親子関係を設定したLoggerを使用しています。
プログラムを実行すると同じフォルダにログファイルが作成されます。(J2SE1.4以上対応)
import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.Logger; import java.util.logging.SimpleFormatter; public class HandlerTest { public static void main(String[] args) throws Exception { FileHandler fileHandler = null; String pattern = "HandlerTest.log";// 出力ファイルの名前付けのパターン boolean append = true;// 追加モードを指定する try { // 追記モードでFileHandler作成 fileHandler = new FileHandler(pattern, append); // ログフォーマット変更 fileHandler.setFormatter(new SimpleFormatter()); // 親Logger取得 Logger parentLogger = Logger.getLogger("parent"); // 親Loggerのログレベル指定 parentLogger.setLevel(Level.CONFIG); // 親LoggerにHandler追加 parentLogger.addHandler(fileHandler); // 子Logger取得 Logger childLogger = Logger.getLogger("child"); // 子Loggerのログレベル指定 childLogger.setLevel(null); // 親子関係を設定 childLogger.setParent(parentLogger); // ログ出力 childLogger.severe("SEVERE は重大な障害を示すメッセージレベルです。 "); childLogger.warning("WARNING は潜在的な問題を示すメッセージレベルです。 "); childLogger.info("INFO はメッセージを情報として提供するメッセージレベルです。 "); childLogger.config("CONFIG は静的な構成メッセージのメッセージレベルです。"); childLogger.fine("FINE はトレース情報を提供するメッセージレベルです。 "); childLogger.finer("FINER はかなり詳細なトレースメッセージを示します。 "); childLogger.finest("FINEST は非常に詳細なトレースメッセージを示します。 "); } finally { if (fileHandler != null) { fileHandler.close(); } } } }
子LoggerにはHandlerを追加していないのに、ファイルに出力されましたね。
これは親LoggerのHandlerに子Loggerの出力メッセージが送信されたからなのです。
また親LoggerのLevelが適用されているのも確認できると思います。