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;