为什么我们将 Loggers 声明为 static final?

新手上路,请多包涵

在 Java 中,为什么最好声明一个记录器 static final

 private static final Logger S_LOGGER

原文由 user489041 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 612
2 个回答
  • private - 这样就没有其他类可以 劫持 你的记录器
  • static - 所以每个类只有一个记录器实例,也避免了序列化记录器的尝试
  • final - 无需在类的生命周期内更改记录器

此外,我更喜欢 name log 尽可能简单,但具有描述性。

编辑:但是这些规则有一个有趣的例外:

 protected final Logger log = LoggerFactory.getLogger(getClass());

而不是:

 private static final Logger log = LoggerFactory.getLogger(Foo.class);

前一种方法允许您在整个继承层次结构中的所有类中使用相同的记录器名称(实际类的名称)。因此,如果 Bar 扩展 Foo ,两者都将记录到 Bar 记录器。有些人觉得它更直观。

原文由 Tomasz Nurkiewicz 发布,翻译遵循 CC BY-SA 3.0 许可协议

查看此博客文章: 摆脱 Java 静态记录器。这是将 slf4j 与 jcabi-log 一起使用的方式:

 import com.jcabi.log.Logger;
class Foo {
  void save(File f) {
    Logger.info(this, "file %s saved successfully", f);
  }
}

永远不要再使用那种静态噪音。

原文由 yegor256 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题