एक दूसरे के बजाय निम्नलिखित पैकेजों में से एक का उपयोग क्यों करेगा?
- जावा लॉगिंग
- कॉमन्स लॉगिंग
- log4j
- SLF4j
- Logback
एक दूसरे के बजाय निम्नलिखित पैकेजों में से एक का उपयोग क्यों करेगा?
जवाबों:
एपी अपीयरेंस के कालानुक्रमिक क्रम में (जहाँ तक मुझे पता है):
logger.debug("The entry is {}.", entry);
//which expands effectively to
if (logger.isDebugEnabled()){
// Note that it's actually *more* efficient than this - see Huxi's comment below...
logger.debug("The entry is " + entry + ".");
}
मुझे लगता है कि जावा में लॉगिंग भ्रामक, असंगत, खराब दस्तावेज और विशेष रूप से बेतरतीब है। इसके अलावा, इन लॉगिंग रूपरेखाओं के बीच समानता की एक बड़ी मात्रा है, जिसके परिणामस्वरूप प्रयास में दोहराव होता है, और इस बात की उलझन होती है कि आप वास्तव में किस लॉगिंग वातावरण में हैं। विशेष रूप से, यदि आप एक गंभीर जावा वेब अनुप्रयोग स्टैक में काम कर रहे हैं, तो आप अक्सर हैं। विभिन्नएक समय में लॉगिंग वातावरण; (उदाहरण के लिए हाइबरनेट लॉग 4 जे और टॉमकैट जावा.टील.लॉगिंग का उपयोग कर सकते हैं)। अपाचे कॉमन्स विभिन्न लॉगिंग फ्रेमवर्क को पाटने के लिए है, लेकिन वास्तव में बस अधिक जटिलता जोड़ता है। यदि आप इसे समय से पहले नहीं जानते हैं, तो यह पूरी तरह से चौंकाने वाला है। मेरे लॉग संदेश कंसोल पर प्रिंट क्यों नहीं कर रहे हैं, आदि? ओह, क्योंकि मैं टॉमकैट लॉग देख रहा हूं, और log4j नहीं। जटिलता की एक और परत जोड़ने पर, एप्लिकेशन सर्वर में वैश्विक लॉगिंग कॉन्फ़िगरेशन हो सकते हैं जो किसी विशेष वेब एप्लिकेशन के लिए स्थानीय कॉन्फ़िगरेशन को नहीं पहचान सकते हैं। अंत में, इन सभी लॉगिंग रूपरेखाओं को पूरा किया जाता है। जावा में लॉग इन करना एक अव्यवस्थित गड़बड़ है जो डेवलपर्स को निराश और भ्रमित कर रहा है।
जावा के शुरुआती संस्करणों में इस परिदृश्य के लिए अंतर्निहित लॉगिंग फ्रेमवर्क नहीं था।
पहले एक महत्वपूर्ण बिंदु है जिसका उल्लेख नहीं किया गया था:
SLF4J (और लॉगबैक और लॉग 4 जे दोनों लॉगिंग बैकएंड के रूप में) तथाकथित डायग्नोस्टिक कॉन्सेप्ट (एमडीसी, जेवाडॉक और प्रलेखन देखें ) के लिए समर्थन है।
यह अनिवार्य रूप से एक थ्रेड-लोकल मैप है <string, String> जिसे आप अपने लॉगिंग ईवेंट में अतिरिक्त संदर्भ जानकारी जोड़ने के लिए उपयोग कर सकते हैं। एमडीसी की वर्तमान स्थिति हर घटना से जुड़ी हुई है।
यह अविश्वसनीय रूप से उपयोगी हो सकता है यदि आप उपयोगकर्ता नाम और अनुरोध के URL (एक वेब की स्थिति में) जैसे सामान डालते हैं। यह एक फिल्टर का उपयोग करके स्वचालित रूप से किया जा सकता है, उदाहरण के लिए।
प्रश्न का उत्तर भी देखें त्रुटि को लॉग करने के लिए सबसे अच्छा अभ्यास क्या हैं? , ख़ास तौर पर:
कॉमन्स लॉगिंग के साथ कुछ संभावित क्लास लोडिंग मुद्दे हैं।
Log4J और SLF4J को एक ही व्यक्ति द्वारा विकसित किया गया था, Log4J के साथ व्यवहार में पाए जाने वाले मुद्दों से सीखते हुए।
हमारी कंपनी की परियोजना में हम लॉग 4 जे का उपयोग करते हैं और स्टीफन की तरह इसका उपयोग करना बहुत आसान है जैसा कि उनके उदाहरण में दिखाया गया है। हमने LOG4j के लिए अपनी स्वयं की पैटर्न कक्षाएं भी लिखी हैं ताकि आप अपनी स्वयं की आउटपुट फ़ाइल स्कीमा बना सकें। आप बता सकते हैं कि आपकी लॉग फ़ाइल कैसी दिखनी चाहिए। मूल log4j कक्षाओं को बढ़ाना संभव है।
सभी Log4j गुण जिन्हें आप log4j.properties फ़ाइल में बदल सकते हैं, इसलिए आप विभिन्न प्रोजेक्ट्स के लिए विभिन्न फ़ाइलों का उपयोग कर सकते हैं।
जावा लॉगिंग मेरा पक्षधर नहीं है, लेकिन यह इसलिए हो सकता है क्योंकि मैं शुरुआत से लॉग 4 जे का उपयोग करता हूं।
कॉमन्स लॉगिंग सिंहावलोकन , पुस्तकालय कोड से प्रवेश आप अंतर्निहित प्रवेश ढांचे पर कोई नियंत्रण नहीं है जब: अपने अस्तित्व के लिए कारण देता है। विभिन्न अपाचे परियोजनाओं के लिए बहुत महत्वपूर्ण है, जिन्हें बाहरी अनुप्रयोगों में जोड़ा जाएगा। आंतरिक आईटी परियोजनाओं के लिए शायद इतना महत्वपूर्ण नहीं है, जहां आपका पूरा नियंत्रण है।
उस ने कहा, मैं कॉमन्स लॉगिंग को लिखता हूं, जैसा कि मुझे पता है कि कई अन्य डेवलपर्स हैं। इसका कारण मानसिक सामान को कम करना है: आप परियोजनाओं या नौकरियों को बदल सकते हैं, और एक नया ढांचा नहीं सीखना होगा (बशर्ते कि नई नौकरी / परियोजना सीएल का उपयोग भी करती है, और / या आप उन्हें इसे स्थानांतरित करने के लिए मना सकते हैं)।
साथ ही, आपके द्वारा उपयोग किए जाने वाले ढांचे के आसपास अपने स्वयं के रैपर बनाने के लिए कुछ मूल्य है। जैसा कि यहाँ वर्णित है , मुझे कस्टम स्ट्रिंग (महत्वपूर्ण) प्रदान करने के लिए एक लॉगवॉपर ऑब्जेक्ट का उपयोग करना पसंद है, और लॉगिंग स्टेटमेंट (कम महत्वपूर्ण) के दृश्य अव्यवस्था को कम करना है।
आम तौर पर मैं Log4J का उपयोग करने के लिए डिफ़ॉल्ट होगा।
अगर मैं जावा 1.4 पर निर्भरता को बुरा नहीं मानता तो मैं जावा लॉगिंग का उपयोग करूंगा लेकिन फिर भी मैं प्राथमिकता में लॉग 4 जे का उपयोग करूंगा।
अगर मैं पहले से ही इसका इस्तेमाल कर रहा हूँ तो मैं कुछ बढ़ाने के लिए कॉमन्स लॉगिंग का उपयोग करूँगा।
मेरा सुझाव है कि एक पतली लॉगिंग मुखौटा बनाना चाहिए जो लॉगिंग फ्रेमवर्क में से किसी को भी लिख सकता है, जिस बिंदु पर बैकिंग इंजन की पसंद बहुत अधिक मूट बिंदु बन जाती है।