क्या आपको लाइब्रेरी कोड से लॉग इन करना चाहिए?


38

अगर मैं जावा लाइब्रेरी विकसित कर रहा हूं, तो क्या लाइब्रेरी के कोड के भीतर से लॉग स्टेटमेंट जारी करना अच्छा है?

पुस्तकालय के भीतर प्रवेश करने से डिबगिंग और समस्या निवारण अधिक पारदर्शी हो जाएगा। हालांकि, दूसरी ओर, मुझे लॉगिंग स्टेटमेंट के साथ अपना लाइब्रेरी कोड लिट करना पसंद नहीं है। क्या कोई प्रदर्शन निहितार्थ भी हैं?


जवाबों:


33

हाँ तुम्हें करना चाहिए। SLF4J की तरह एक लॉगिंग मुखौटा का उपयोग करने से आपको अपने उपयोगकर्ताओं को एक विशेष लॉगिंग ढांचे के बोझ के बिना लचीलापन मिलता है।

व्यापक रूप से वितरित घटकों और पुस्तकालयों के लेखक घटक या पुस्तकालय के अंतिम-उपयोगकर्ता पर लॉगिंग ढांचे को लागू करने से बचने के लिए SLF4J इंटरफ़ेस के विरुद्ध कोड कर सकते हैं। इस प्रकार, एंड-यूज़र क्लासपाथ पर संबंधित slf4j बाइंडिंग को सम्मिलित करके तैनाती के समय वांछित लॉगिंग फ्रेमवर्क चुन सकता है, जिसे बाद में क्लास के पथ पर किसी अन्य के साथ मौजूदा बाइंडिंग को बदलकर और एप्लिकेशन को पुनरारंभ करके बदला जा सकता है। यह दृष्टिकोण सरल और बहुत मजबूत साबित हुआ है।

इसके अलावा, यदि आपके उपयोगकर्ताओं में SLF4J जार शामिल नहीं है ( उपयोगकर्ता के गाइड से ):

SLF4J संस्करण 1.6.0 के रूप में, यदि कोई बंधन वर्ग पथ पर नहीं पाया जाता है, तो slf4j-api सभी लॉग अनुरोधों को खारिज करने वाले एक नो-ऑपरेशन कार्यान्वयन के लिए डिफ़ॉल्ट होगा।

यदि आप लॉगिंग के प्रदर्शन निहितार्थ के बारे में चिंतित हैं, तो इस SLF4J FAQ प्रविष्टि की जाँच करें । विचार यह है कि आप स्ट्रिंग इनलाइन में जोड़ने के बजाय लॉग्स स्टेटमेंट प्रदान करते हैं:

निम्न दो पंक्तियाँ सटीक समान आउटपुट प्राप्त करेंगी। हालाँकि, दूसरा फ़ॉर्म अक्षम लॉगिंग स्टेटमेंट के मामले में, कम से कम 30 के कारक द्वारा पहले फॉर्म को बेहतर बनाएगा।

logger.debug("The new entry is "+entry+".");
logger.debug("The new entry is {}.", entry);

SLF4J अभी तक एक और लॉगिंग मुखौटा है?

SLF4J वैचारिक रूप से JCL के समान है। जैसे, यह एक और लॉगिंग मुखौटा के रूप में सोचा जा सकता है। हालांकि, SLF4J डिजाइन में बहुत सरल है और यकीनन अधिक मजबूत है। संक्षेप में, SLF4J प्लेग [जकार्ता कॉमन्स लॉगिंग] प्लेग मुद्दों से बचते हैं।


क्या एक अच्छा खुला स्रोत पुस्तकालय है जो पुस्तकालय कोड के भीतर लॉग करता है जिसे आप इंगित कर सकते हैं? इसलिए हम देख सकते हैं कि यह कैसे किया जाता है?
user1870400

स्प्रिंग फ्रेमवर्क एक अच्छी तरह से ज्ञात जावा लाइब्रेरी है जो ऐसा करता है; अपने मामले में उन्होंने JCL को चुना।
माइक पार्टरिज

17

हां , आपको अपने लाइब्रेरी कोड से लॉग इन करना चाहिए। यह न केवल आपको विकसित करने में मदद करता है, बल्कि पुस्तकालय का उपयोग करने वाले लोग इसे उपयोगी पाएंगे। याद रखें कि आप हमेशा लॉगिंग स्तर निर्धारित कर सकते हैं केवल आपको जो लॉग स्टेटमेंट्स की आवश्यकता है - और वे वही कर सकते हैं।

हाल ही में मैं Mybatis का उपयोग कर रहा था , एक खुला स्रोत ORM उपकरण। मैं एक ऐसे मुद्दे पर बहस कर रहा था, जहां मुझे लगा कि सही होना चाहिए था कोई परिणाम नहीं लौट रहा था। यह एक मानकीकृत क्वेरी थी, और जब से मायबेटीज़ ने अपने पुस्तकालय कोड में लॉगिंग की है, मैं इसे चालू करने में सक्षम था और वास्तविक क्वेरी को चलाया जा रहा था। यह बताना आसान था कि मैंने दो मापदंडों की अदला-बदली की। लाइब्रेरी में लॉग-इन किए बिना मुझे लगभग इतनी जल्दी समस्या नहीं मिली।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.