设置内部类的日志级别(在Glassfish中)

时间:2012-08-10 08:38:53

标签: java logging glassfish

我正在寻找一种设置内部类的日志级别的方法,假设我有以下类:

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

我可以使用名称mypackage.Outer设置外部的日志级别。但是如何为Inner设置它?我测试了以下内容但没有成功:

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

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

2 个答案:

答案 0 :(得分:4)

Inner.class.getName()正在返回mypackage.Outer$Inner,该name未遵循Logger.getLogger()参数的预期约定

  

Logger.getLogger("myPackage.Outer.Inner").log(Level.FINE, "I'm alive too!") - 记录器的名称。 这应该是以点分隔的名称,通常应该基于子系统的包名或类名,例如java.net或javax.swing

您可以明确使用

myPackage.Outer.Inner

并使用SimpleFormatter()

设置级别

奇怪的是,消息由28-feb-2013 19:04:16 mypackage.Outer$Inner logSomething FINE: I'm alive too! 格式化,使用$作为内部类,因为它输出的是类名,而不是记录器名

{{1}}

答案 1 :(得分:0)

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

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