昔書いたホームページ上のJava Logging APIについてのページでは、グローバルロガーの取得をLogger.getLogger(Logger.GLOBAL_LOGGER_NAME)で取得する方法を記述していました。
Java SE 7に合わせて、Logger.getGlobal()に変えるよう記述を変更していたのですが、なんとサンプルコードが動かないという事態に・・・。
問題は、mainメソッドでLogger.getGlobal().info("program start"); と書いてもログが出力されないというもの。デフォルトではコンソールにINFOレベル以上は出力されるはずなのですが・・・。
いろいろ調べてみましたが、どうやら初期化バグではないかと思われます。
- Logger.getGlobal()で取得したLoggerインスタンスはparentがnull
- Logger.getLogger(Logger.GLOBAL_LOGGER_NAME)で取得したLoggerインスタンスはparentがインスタンス(ルートロガー)を指す
- Logger.getGlobal()とLogger.getLogger(Logger.GLOBAL_LOGGER_NAME)は同じLoggerインスタンスを返却する
といったあたりです。
Bug paradeにもこれらしいバグは見つからないので、新しいバグとしてBug paradeにsubmitしてみました。
なお、Java Logging APIについてのページはURLの引っ越しとJava SE 7のgetGlobal対応と上述バグの回避策、プロパティファイルでの出力書式指定を記述しました(以下URL)。