2012-11-30 9 views
5

मैं जावा में एक वेब एप्लिकेशन लिख रहा हूं और लॉगिंग के लिए SLF4J का उपयोग कर रहा हूं।एसएलएफ 4 जे, लॉगजरफैक्टरी.getLogger (MyClassName.class) लिखने से बचने के लिए हर बार

मैं हर वर्ग का उपयोग करता है प्रवेश के लिए नीचे लाइन लिखने के थक बनने हूँ:

private static final Logger logger = LoggerFactory.getLogger(ThisClassName.class); 

अनावश्यक कोड बचने के लिए, मैं

interface Loggable { 
    Logger logger(); 
} 

की तरह कुछ सोच रहा हूँ और प्रत्येक वर्ग सिर्फ कर सकते हैं इस इंटरफ़ेस को कार्यान्वित करें तो एओपी जैसे कुछ जादू LoggerFactory भाग को सम्मिलित करते हैं।

क्या किसी ने इसे लागू किया है या यह जानता है कि इसे कैसे प्राप्त किया जाए?

धन्यवाद!

उत्तर

12

क्या आप ग्रहण का उपयोग कर रहे हैं? यदि हां, तो क्यों नहीं सिर्फ एक कोड टेम्पलेट की तरह "लकड़हारा" एक कीवर्ड तथा नीचे टेम्पलेट इसके लिए साथ उपयोग करें:

${:import(org.slf4j.LoggerFactory, org.slf4j.Logger)} 
private final static Logger LOGGER = LoggerFactory.getLogger(${enclosing_type}.class); 

इस तरह से आप बस "लकड़हारा" टाइप करेंगे, पारी + अंतरिक्ष मारा और आप कर चुके हैं।

+0

वास्तव में, सरल देखें और काम करता है। इस तरह के मामूली मुद्दे के लिए एओपी को नियोजित करना एक पागल विचार है IMHO (विशेष रूप से यदि आपकी परियोजना अभी तक एओपी के लिए कॉन्फ़िगर नहीं है) –

0

एओपी का उपयोग करके लॉगिंग Here में अच्छी तरह से प्रदर्शित किया गया है। ऐसा कोई तरीका नहीं है जहां हम विधि निष्पादन के विवरण लॉग इन करने के लिए गतिशील रूप से लॉगर को किसी विधि के अंदर सम्मिलित कर सकते हैं। यूनिट परीक्षण के मामले इसका ख्याल रख सकते हैं। विधि कॉलिंग के लॉगिंग को एओपी

1

द्वारा देखभाल की जा सकती है क्या आप सीडीआई का उपयोग कर रहे हैं? यदि ऐसा है, तो एक निर्माता विधि बनाएं और फिर किसी भी सीडीआई सक्षम वर्ग में लॉगर इंजेक्ट करें।

@Produces Logger createLogger(InjectionPoint injectionPoint) { 
    return Logger.getLogger(injectionPoint.getMember().getDeclaringClass().getName()); 
} 

http://docs.jboss.org/weld/reference/latest/en-US/html/injection.html#d0e1662

संबंधित मुद्दे