12

内部クラスのログレベルを設定する方法を探しています。たとえば、次のクラスがあるとします。

package mypackage;

class Outer {
   Inner inner = new Inner();

   public void logSomething() {
       Logger.getLogger(Outer.class.getName()).log(Level.FINE, "I'm alive!");
       inner.logSomething();
   } 

   class Inner {
       public void logSomething() {
           Logger.getLogger(Inner.class.getName()).log(Level.FINE, "I'm alive too!");
       }
   }
}

名前を使用してOuterのログレベルを設定できますmypackage.Outer。しかし、どうすれば設定できInnerますか?私は成功せずに以下をテストしました:

  • mypackage.Outer
  • mypackage.Outer.Inner
  • mypackage.Outer$Inner(エラーが発生します)
  • mypackage.Inner

これを行う方法があるかどうか誰かが知っていますか?

4

2 に答える 2

5

Inner.class.getName()Logger.getLogger()パラメータmypackage.Outer$Innerに期待される規則に従わないが返されます

name-ロガーの名前。これはドットで区切られた名前である必要があり、通常はjava.netやjavax.swingなどのサブシステムのパッケージ名またはクラス名に基づいている必要があります。

明示的に使用できます

Logger.getLogger("myPackage.Outer.Inner").log(Level.FINE, "I'm alive too!")

を使用してレベルを設定しますmyPackage.Outer.Inner

不思議なことに、メッセージはSimpleFormatter()、ロガー名ではなくクラス名を出力するため、内部クラスに$を使用してフォーマットされます。

28-feb-2013 19:04:16 mypackage.Outer$Inner logSomething
FINE: I'm alive too!
于 2013-02-28T18:06:35.023 に答える
0

Inner.class。getCanonicalName()はmypackage.Outer.Innerを返します。だからあなたは使うことができます

Logger.getLogger(Inner.class.getCanonicalName()).log(Level.FINE, "I'm alive too!")
于 2021-05-20T08:03:46.013 に答える