2010-11-24 56 views
5

我使用的是枚舉單例,但實現日誌很麻煩。這:如何在枚舉單例中實現日誌記錄?

public enum Foo { 
    INSTANCE; 

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

    ... 
} 

記錄器被實例化的,我會實例化一個普通的Java類中的記錄方式,但當然,我得到以下錯誤:

Foo.java: illegal reference to static field from initializer 

是否有相當於辦法登錄枚舉單身?

回答

15

在回答你的問題,只是做了記錄靜態...

順便說一句,我認爲它的標準做法,即使使用靜態記錄的對象實例。換句話說,記錄器在課堂上;所有對象都使用靜態記錄器引用。

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

大多數的使用記錄在那裏有記錄的靜態屬性的例子...

+2

+1爲靜態記錄器。 SLF4J也有一個有趣的討論:http://www.slf4j.org/faq.html#declared_static – 2010-11-24 23:42:08

3

登錄動態:

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

這將是非常繁瑣的寫出每次.. – harto 2010-11-24 23:01:12

2

有點較短:使用方法: logger()。debug(...)

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

    return logger; 
} 

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