Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在枚举单例中实现日志记录?_Java_Logging_Enums_Singleton - Fatal编程技术网

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

Java 如何在枚举单例中实现日志记录?,java,logging,enums,singleton,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 有没有等效的方法登录

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

public enum Foo {
  INSTANCE;

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

  ...
}
记录器的实例化方式与我为普通Java类实例化记录器的方式相同,但我当然会遇到以下错误:

Foo.java: illegal reference to static field from initializer 

有没有等效的方法登录enum Singleton?

在回答您的问题时,只需将记录器设置为静态

顺便说一句,我认为它的标准实践是使用静态记录器,即使是对象实例。换句话说,记录器在类上;所有对象都使用静态记录器引用

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

动态日志:

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

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


如果你使用IDE,那真的不是。为自己设置一个模板。在Eclipse中,我使用“log”扩展到这个模板中,以获得一个快速调试日志条目。这种方法的优点是什么?实例对IOC友好,可用于为服务器中的每个应用程序定义不同的日志环境。稍微慢一点,但也有某些优点(以及其他缺点)。+1用于静态记录器。SLF4J也有一个有趣的讨论:
private static Logger logger()
{
    if(logger == null)
    {
        logger = Logger.getLogger(AnEnum.class);
    }

    return logger;
}

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