为什么我们宣布记录器静态最终?

2022-08-31 07:30:30

在Java中,为什么声明记录器是最佳实践?static final

private static final Logger S_LOGGER

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

另外,我更喜欢名称尽可能简单,但具有描述性。log

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

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

相反:

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

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


答案 2

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

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

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


推荐