第67回 ロギングその6
引き続き「ロギング」をテーマにしていきます。
前回はLoggerの親子関係について学びました。
2つの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 NameSpaceTest { public static void main(String[] args) throws Exception { FileHandler fileHandler = null; String pattern = "NameSpaceTest.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.WARNING); // 親LoggerにHandler追加 parentLogger.addHandler(fileHandler); // 子Logger取得 Logger childLogger = Logger.getLogger("parent.child"); // 子Loggerのログレベル指定 childLogger.setLevel(Level.CONFIG); // ログ出力 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自身にLevelが設定されているので、親のLevelは適用されていません。