当创建一个日志记录器时,如何避免重复自己?

6 浏览
0 Comments

当创建一个日志记录器时,如何避免重复自己?

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

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

当我重构代码(例如更改类名)时,我的IDE会管理更改该行的适当方式。但是,我仍然觉得必须重复类名很麻烦。我真正想做的就是像Logger.getLogger(getName())Logger.getLogger(class.getName())这样做,但在静态初始化中这不是合法的Java。

有没有更好的方法可以获取记录器而不涉及重复自己?

admin 更改状态以发布 2023年5月24日
0
0 Comments

我创建了一个Eclipse代码模板,并在每次使用时使用它。\n只需键入 “logger”,然后按下“Ctrl”和“Space”以激活它。

0
0 Comments

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();
  ...
}

0