在父类中记录静态方法

时间:2013-03-22 13:47:09

标签: java static log4j

我有一个抽象类Parent,有2个子类A和B. Parent有一个名为do()的静态方法。我想知道是否有一种方法可以让这种静态方法在Logger中为A类添加日志信息,当它被称为A.do()时记录B,当它被称为B.do()时。通常的

protected final Logger LOGGER = Logger.getLogger(getClass());

不起作用,因为do()是一个静态方法,因此Logger也需要是静态的,但getClass()方法显然不是静态的。

感谢。

3 个答案:

答案 0 :(得分:0)

private final static Logger LOGGER = Logger.getLogger(A.class);

每个班级都有自己的logger:指定班级很好。

答案 1 :(得分:0)

我不推荐它,但如果你真的想要它......

public class A {
  public static void do() {
    doImpl(A.class);
  }
  protected static void doImpl(Class<?> refClass) {
  }
}

public class B extends A {
  public static void do() {
    doImpl(B.class);
  }
}

答案 2 :(得分:-1)

最佳做法是将LOGGER声明为静态,例如

protected final static Logger LOGGER = Logger.getLogger(getClass());

这样您就可以使用动态和静态方法中的LOGGER。

此外,每个类都应该有自己的记录器实例。所以我会将protected更改为private。

另外,不要调用“getClass()”,而应调用“MyApp.class”,例如

private final static Logger LOGGER = Logger.getLogger(MyApp.class);