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!");
       }
   }
}

我可以使用 name 设置 Outer 的日志级别mypackage.Outer。但是我该如何设置呢Inner?我已经测试了以下但没有成功:

  • mypackage.Outer
  • mypackage.Outer.Inner
  • mypackage.Outer$Inner(给出错误)
  • mypackage.Inner

有谁知道是否有办法做到这一点?

4

2 回答 2

5

Inner.class.getName()正在返回mypackage.Outer$Inner不符合Logger.getLogger()参数的预期约定

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

内部类。getCanonicalName()正在返回 mypackage.Outer.Inner 。所以你可以使用

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