2013-02-05 103 views
5

क्या यह करने के लिए एक अच्छी बात है; इस तरह की विधि के माध्यम से लॉग इन करने के लिए?जेनेरिक लॉगिंग विधि

public static void log(final Object... messages) { 
    logger.info(Joiner.on(',').useForNull("null").join(messages)); 
} 

// कहाँ कोड के अन्य भागों में हम स्ट्रिंग संयोजन के बजाय अल्पविरामों का उपयोग लकड़हारा विधि कॉल कर सकते हैं। कृपया ध्यान दें कि जॉइनर एक अमरूद वर्ग है।

log(" Check ",obja.getXXX(),anotherObject.getMethod()); 

उम्मीद स्वच्छ कोड, सुविधा और प्रदर्शन है।

+2

मैं एक दूसरा पैरामीटर जोड़ूंगा जो आपको लॉग की गंभीरता निर्दिष्ट करने की अनुमति देता है। – Zylth

उत्तर

2

शायद आप अल्पविराम के बजाय ' ' (खाली) पर शामिल होना चाहते हैं लेकिन डिजाइन दृष्टिकोण एक अच्छा विचार है।

प्रदर्शन के अनुसार, यह आदर्श नहीं है। आप एक अतिरिक्त ऑब्जेक्ट सरणी और एक योजक प्लस योजक के आंतरिक बफर बनाते हैं।

तो आप इस दृष्टिकोण के साथ केवल 3 में से 2 प्राप्त कर सकते हैं। यदि आप वास्तव में प्रदर्शन की परवाह करते हैं, तो slf4j का उपयोग करें जो पहले से ही एक समान दृष्टिकोण का उपयोग करता है।

4

मैं SLF4J's Logger इंटरफेस का उपयोग करता हूं (Logback कार्यान्वयन के साथ), जो मुझे पढ़ने के लिए बहुत साफ लगता है।

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

public class Test { 
    private static final Logger logger = LoggerFactory.getLogger(Test.class); 

    public void method(String name, int age, Address address) { 
     logger.info("Person {}, age {} years old resides at {}", name, age, address); 
    } 
} 
+0

+1 मैं वही चाहता हूं। – Alex

+0

@ आदर्श मैं निश्चित रूप से एक मौका मिलने के बाद एसएलएफ 4 जे की कोशिश करता हूं। Ty। – r0ast3d

2

एसएलएफ 4 जे का इंटरफ़ेस बेहतर है, जैसा कि अन्य उत्तरों कहते हैं।

मुझे समझ में नहीं आता कि यह प्रदर्शन सुधार कैसे है। हो सकता है कि ओपी के मन में एक विशिष्ट उपयोग केस हो और कुछ उदाहरण कोड इसे समझाएंगे। यदि विचार संदेश को पहले से इकट्ठा करना है और उन्हें लॉग विधि आमंत्रण में एक साथ भेजना है, तो आप एक एपेंडर का उपयोग करके बेहतर सेवा प्रदान करेंगे जो बफरिंग करता है।