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

时间:2010-11-24 22:35:00

标签: java logging enums singleton

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

public enum Foo {
  INSTANCE;

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

  ...
}

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

Foo.java: illegal reference to static field from initializer 

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

3 个答案:

答案 0 :(得分:15)

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

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

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

在那里使用记录器的大多数示例都将记录器作为静态属性...

答案 1 :(得分:4)

动态记录:

Logger.getLogger(Foo.class.getName()).info("log info");

答案 2 :(得分:2)

稍微短一点:使用方法: logger()。debug(...)

private static Logger logger()
{
    if(logger == null)
    {
        logger = Logger.getLogger(AnEnum.class);
    }

    return logger;
}

/** Logger **/
private static Logger logger;