3

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

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

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

谢谢。

4

3 回答 3

1

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

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

于 2013-03-22T14:00:00.370 回答
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);
  }
}
于 2013-03-22T14:22:12.490 回答
-1

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

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

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

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

此外,您应该调用“MyApp.class”而不是调用“getClass()”,例如

private final static Logger LOGGER = Logger.getLogger(MyApp.class);
于 2013-03-22T13:50:54.713 回答