创建记录器时如何避免重复自己?

Jam*_*ble 10 java logging

我认为创建实例的常用习惯java.util.logging.Logger是:

public class SomeClassName {

    private static final Logger LOG = Logger.getLogger(SomeClassName.class.getName());

}
Run Code Online (Sandbox Code Playgroud)

当我重构代码时,我的IDE将管理适当的更改行(例如,更改类的名称).不过,我仍然不得不重复我的课程名称.我真正喜欢做的事情是Logger.getLogger(getName())或者Logger.getLogger(class.getName()),但这不是合法的Java静态启动.

是否有更好的方法来获取不涉及重复自己的记录器?

Pét*_*rök 10

Java专家通讯的第137期处理此问题.它建议应用一个记录器工厂,它可以检测实际的类名,例如通过生成异常并分析调用堆栈.

我个人认为这比原来的问题更糟糕,但这只是我的2美分.无论如何,技术上它很有趣,所以这里是:

public class LoggerFactory {
  public static Logger make() {
    Throwable t = new Throwable();
    StackTraceElement directCaller = t.getStackTrace()[1];
    return Logger.getLogger(directCaller.getClassName());
  }
}

...

public class BetterApplication {
  private final static Logger logger = LoggerFactory.make();

  ...
}
Run Code Online (Sandbox Code Playgroud)


ada*_*shr 8

我创建了一个Eclipse代码模板并且每次都使用它.

在此输入图像描述

您只需键入logger并按Ctrl+ Space即可激活它.

  • 我不认为这是被问到的,因为OP特别提到他的IDE为他管理这个. (3认同)
  • 我认为代码模板提示是有效的,因为OP提到他的IDE管理对类名的更改,而不是行的原始生成. (2认同)