2010-11-24 26 views
5

मैं एक एनम सिंगलटन का उपयोग कर रहा हूं, लेकिन लॉगिंग लागू करना परेशानी है। यह:मैं एनम सिंगलटन में लॉगिंग कैसे कार्यान्वित करूं?

public enum Foo { 
    INSTANCE; 

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

    ... 
} 

लकड़हारा तरह से है कि मैं एक साधारण जावा वर्ग के लिए एक लकड़हारा का दृष्टांत हैं में instantiated है, लेकिन निश्चित रूप से मैं निम्नलिखित त्रुटि मिलती है:

Foo.java: illegal reference to static field from initializer 

वहाँ के लिए एक बराबर तरीका है enum singletons में लॉग इन करें?

उत्तर

15

अपने प्रश्न का उत्तर में, बस लकड़हारा स्थिर बनाने के ...

Btw, मैं वस्तु उदाहरणों के लिए भी एक स्थिर लकड़हारा उपयोग करने के लिए अपने मानक अभ्यास लगता है। दूसरे शब्दों में, लॉगर कक्षा पर है; सभी वस्तुएं स्थिर लॉगर संदर्भों का उपयोग करती हैं।

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

एक लकड़हारा का उपयोग कर एक स्थिर संपत्ति के रूप में लकड़हारा वहाँ है में का उदाहरण के अधिकांश ...

+2

+1। एसएलएफ 4 जे में भी एक दिलचस्प चर्चा है: http://www.slf4j.org/faq.html#declared_static –

3

लॉग गतिशील देखें:

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

यह हर बार लिखने के लिए बहुत कठिन होगा .. – harto

+1

यह वास्तव में नहीं है यदि आप आईडीई का उपयोग करते हैं। खुद को एक टेम्पलेट सेट करें। ग्रहण में, मैं इस टेम्पलेट में एक त्वरित डीबग लॉग प्रविष्टि के विस्तार के लिए "लॉग" का उपयोग करता हूं। – Nerdfest

+0

उस विधि का क्या फायदा है? –

2

थोड़ा छोटा: एक विधि का उपयोग करें: लॉगर()। डीबग (...)

01 स्थैतिक लॉगर के लिए
private static Logger logger() 
{ 
    if(logger == null) 
    { 
     logger = Logger.getLogger(AnEnum.class); 
    } 

    return logger; 
} 

/** Logger **/ 
private static Logger logger; 
संबंधित मुद्दे