第72回 ロギングその11
引き続き「ロギング」をテーマにしていきます。
前回はロギングの設定の切り替えのためにLogManagerを使いました。
今回はLogManagerの別の機能の解説をします。
LogManagerは前回の機能の他に、Loggerの階層化された名前空間の管理をしています。
名前付きLoggerはすべて、この名前空間内に格納される仕組みになっているのです。
以下のサンプルでは、LogManagerの管理下のLoggerの名前とログレベルを出力しています。
またLogManagerのresetメソッドの使用により、Loggerの構成のリセットも行っています。
リセット前とリセット後の出力結果がどうなるか確認してみましょう。(Java5以上対応)
import java.util.Collections; import java.util.logging.Level; import java.util.logging.LogManager; import java.util.logging.Logger; public class LogManagerTest { public static void main(String[] args) throws Exception { // Loggerを取得、Levelを設定 Logger.getLogger(LogManagerTest.class.getName()).setLevel(Level.FINE); Logger.global.setLevel(Level.CONFIG); Logger.getLogger("").setLevel(Level.ALL); // LogManager取得 LogManager logManager = LogManager.getLogManager(); // LogManagerの管理下のLoggerとログレベル表示 System.out.println("リセット前"); for (String loggerName : Collections.list(logManager.getLoggerNames())) { Logger logger = logManager.getLogger(loggerName); System.out.println(logger.getName() + "のログレベルは" + logger.getLevel()); } // LogManagerのリセット logManager.reset(); System.out.println(); // LogManagerの管理下のLoggerとログレベル表示 System.out.println("リセット後"); for (String loggerName : Collections.list(logManager.getLoggerNames())) { Logger logger = logManager.getLogger(loggerName); System.out.println(logger.getName() + "のログレベルは" + logger.getLevel()); } } }
名前が表示されないLoggerは以前説明したルートロガーです。
リセット後、ルートロガーのLevelがINFOに戻り、それ以外のLoggerのレベルはnullになります。
またルートロガー以外のLoggerに付随していたHandlerは全て削除されます。