如何在枚举单例中实现日志记录?

Eri*_*yen 6 java logging singleton enums

我正在使用枚举单例,但实现日志记录很麻烦.这个:

public enum Foo {
  INSTANCE;

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

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

记录器以我为普通Java类实例化记录器的方式实例化,但当然我收到以下错误:

Foo.java: illegal reference to static field from initializer 
Run Code Online (Sandbox Code Playgroud)

是否有相同的方式登录枚举单身?

hvg*_*des 15

在回答你的问题时,只需使记录器保持静态......

顺便说一下,我认为它的标准做法是使用静态记录器,即使对象实例也是如此.换句话说,记录器在课堂上; 所有对象都使用静态记录器引用.

看到

http://logging.apache.org/log4j/1.2/manual.html

大多数使用记录器的例子都有记录器作为静态属性......

  • +1为静态记录器.SLF4J也有一个有趣的讨论:http://www.slf4j.org/faq.html#declared_static (2认同)

Ner*_*est 5

动态记录:

Logger.getLogger(Foo.class.getName()).info("log info");
Run Code Online (Sandbox Code Playgroud)