हम सेल्फमेड रैपर के पीछे log4j का उपयोग कर रहे हैं। हम अब इसकी और अधिक विशेषताओं का उपयोग करने की योजना बना रहे हैं।
क्या हमें लॉगबैक पर अद्यतन करना चाहिए?
(मेरा मतलब है कि फ्रेमवर्क SLF4J की तरह नहीं है)
हम सेल्फमेड रैपर के पीछे log4j का उपयोग कर रहे हैं। हम अब इसकी और अधिक विशेषताओं का उपयोग करने की योजना बना रहे हैं।
क्या हमें लॉगबैक पर अद्यतन करना चाहिए?
(मेरा मतलब है कि फ्रेमवर्क SLF4J की तरह नहीं है)
जवाबों:
लॉगबैक मूल रूप से SLF4J API को लागू करता है। इसका मतलब है कि यदि आप लॉगबैक का उपयोग कर रहे हैं, तो आप वास्तव में SLF4J API का उपयोग कर रहे हैं। आप सैद्धांतिक रूप से लॉगिंग के लिए सीधे लॉगबैक एपीआई के आंतरिक का उपयोग कर सकते हैं, लेकिन यह अत्यधिक हतोत्साहित करता है। सभी लॉगबैक प्रलेखन और लॉगर्स पर उदाहरण SLF4J एपीआई के संदर्भ में लिखे गए हैं।
तो लॉगबैक का उपयोग करके, आप वास्तव में SLF4J का उपयोग करेंगे और यदि किसी भी कारण से आप log4j पर वापस जाना चाहते हैं, तो आप मिनटों में ऐसा कर सकते हैं बस अपने वर्ग पथ पर slf4j-log4j12.jar को छोड़ दें।
जब लॉगबैक से लॉग 4 जे में माइग्रेट किया जाता है, तो लॉगबैक विशिष्ट भागों, विशेष रूप से लॉगबैक.एक्सएमएल कॉन्फ़िगरेशन फाइल में निहित है, फिर भी इसके लॉग 4 जे समकक्ष, यानी लॉग 4 जे.प्रोपरेटीज में माइग्रेट करना होगा । जब दूसरी दिशा में माइग्रेट हो रहा है, तो log4j कॉन्फ़िगरेशन, यानी log4j.properties , को इसके शीर्ष समकक्ष के रूप में परिवर्तित करना होगा। उसके लिए एक ऑन लाइन टूल है। कॉन्फ़िगरेशन फ़ाइलों को माइग्रेट करने में शामिल कार्य की मात्रा आपके सभी सॉफ़्टवेयर के स्रोत कोड और इसकी निर्भरता में प्रसारित किए गए लकड़हारा कॉल को माइग्रेट करने के लिए आवश्यक कार्य से बहुत कम है।
अगर आप? जी हां ।
क्यों? Log4J अनिवार्य रूप से Logback द्वारा पदावनत किया गया है ।
अत्यावश्यक है? शायद नहीं।
क्या यह दर्द रहित है? शायद, लेकिन यह आपके लॉगिंग स्टेटमेंट पर निर्भर हो सकता है।
ध्यान दें कि यदि आप वास्तव में LogBack (या SLF4J) का पूरा लाभ लेना चाहते हैं, तो आपको वास्तव में उचित लॉगिंग स्टेटमेंट लिखने की आवश्यकता है । यह आलसी मूल्यांकन के कारण तेजी से कोड जैसे फायदे प्राप्त करेगा, और कोड की कम लाइनें क्योंकि आप गार्ड से बच सकते हैं।
अंत में, मैं अत्यधिक SLF4J की सिफारिश करता हूं। (क्यों पहिया अपने स्वयं के मुखौटा के साथ फिर से बनाएँ?)
लॉगिंग की दुनिया में (अपाचे कॉमन्स लॉगिंग, slf4j या यहां तक कि Log4j 2.0 API) और कार्यान्वयन (Log4j 1 + 2, java.util.log, TinyLog, Logback) जैसे पहलू हैं।
मूल रूप से आपको अपने सेल्फमेड रैपर को slf4j IF से बदलना चाहिए और केवल IF यदि आप किसी कारण से इससे खुश नहीं हैं। जबकि Apache Commons Logging वास्तव में एक आधुनिक API, slf4j प्रदान नहीं कर रहा है और नया Log4j 2 मुखौटा प्रदान कर रहा है। यह देखते हुए कि एप्स का एक गुच्छा slf4j को एक रैपर के रूप में उपयोग करता है, यह उपयोग करने के लिए समझ में आता है।
slf4j कई अच्छी एपीआई चीनी देता है, जैसे कि slf4j डॉक्स से यह उदाहरण:
logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);
यह परिवर्तनशील प्रतिस्थापन है। यह भी Log4j 2 द्वारा समर्थित है।
हालाँकि आपको इस बात की जानकारी होनी चाहिए कि slf4j को QOS द्वारा विकसित किया गया है जो लॉगबैक को भी बनाए रखते हैं। Log4j 2.0 को Apache Software Foundation में बेक किया गया है। पिछले तीन वर्षों में एक जीवंत और सक्रिय समुदाय फिर से विकसित हुआ है। यदि आप ओपन सोर्स की सराहना करते हैं जैसा कि Apache Software Foundation द्वारा किया गया है तो इसकी सभी गारंटियों के साथ आप सीधे Log4j 2 का उपयोग करने के लिए slf4j का उपयोग करके पुनर्विचार कर सकते हैं।
कृपया ध्यान दें:
पिछले log4j 1 में सक्रिय रूप से बनाए नहीं रखा गया था जबकि लॉगबैक था। लेकिन आज हालात अलग हैं। Log4j 2 सक्रिय रूप से बनाए रखा है और लगभग नियमित समय पर जारी करता है। इसमें बहुत सारी आधुनिक विशेषताएं शामिल हैं और -imho- कुछ चीजों को लॉगबैक से बेहतर बनाता है। यह कभी-कभी स्वाद का मामला होता है और आपको अपना निष्कर्ष निकालना चाहिए।
मैंने Log4j 2.0 की नई विशेषताओं पर एक त्वरित अवलोकन लिखा: http://www.grobmeier.de/the-new-log4j-2-0-05122012.html
पढ़ते समय आप देखेंगे कि Log4j 2 लॉगबैक से प्रेरित था लेकिन अन्य लॉगिंग फ्रेमवर्क द्वारा भी। लेकिन कोड का आधार अलग है; यह Log4j 1 के साथ लगभग कुछ भी साझा नहीं करता है और Logback के साथ शून्य है। इससे कुछ सुधार होते हैं जैसे कि Log4j 2 हुड के नीचे स्ट्रिंग्स के बजाय बाइटस्ट्रीम के साथ संचालित होता है। यह भी पुन: कॉन्फ़िगर करते समय घटनाओं को ढीला नहीं करता है।
Log4j 2 मुझे ज्ञात अन्य चौखटों की तुलना में अधिक गति से लॉग इन कर सकता है: http://www.grobmeier.de/log4j-2-performance-close-to-insane-20072013.html
और फिर भी उपयोगकर्ता समुदाय लॉगबैक की तुलना में बहुत बड़ा लगता है: http://www.grobmeier.de/apache-log4j-is-the-leading-log-framework-06082013.html
सभी ने कहा कि सबसे अच्छा विचार यह है कि आप लॉगिंग चौखटे को चुनते हैं जो कि आप जो हासिल करना चाहते हैं उसके लिए सबसे उपयुक्त है। यदि मैं उत्पादन परिवेश में लॉगिंग को अक्षम कर दूंगा और अपने ऐप में केवल मूल लॉगिंग करूंगा, तो मैं एक पूर्ण रूपरेखा स्विच नहीं करूंगा। हालाँकि यदि आप लॉगिंग के साथ थोड़ा अधिक करते हैं तो केवल उन विशेषताओं को देखें जो फ्रेमवर्क और उनके डेवलपर्स द्वारा प्रदान की गई हैं। जब आप QOS के माध्यम से लॉगबैक के लिए व्यावसायिक समर्थन प्राप्त करते हैं (मैंने सुना है) वर्तमान में Log4j 2 के लिए कोई व्यावसायिक समर्थन नहीं है। दूसरी तरफ, यदि आपको ऑडिट लॉगिंग करने की आवश्यकता है और async एपेंडर्स द्वारा प्रदान किए गए उच्च प्रदर्शन की आवश्यकता है तो यह बहुत मायने रखता है। check log4j 2
कृपया ध्यान दें कि वे सभी सुविधा प्रदान करने के बावजूद, facades हमेशा थोड़ा प्रदर्शन करते हैं। यह शायद आपको बिल्कुल प्रभावित नहीं कर रहा है, लेकिन यदि आप कम संसाधनों पर हैं, तो आपको अपने पास मौजूद हर चीज को बचाने की आवश्यकता हो सकती है।
आपकी आवश्यकताओं को बेहतर ढंग से जानने के बिना एक सिफारिश देना लगभग असंभव है। बस: बहुत सारे लोग स्विच करने के कारण सिर्फ स्विच नहीं करते। केवल स्विच करें क्योंकि आप इसका मूल्य देखते हैं। और तर्क है कि log4j मर चुका है अब गिनती नहीं है। यह जीवित है, और यह गर्म है।
अस्वीकरण: मैं वर्तमान में VP, Apache लॉगिंग सेवाएँ और log4j में शामिल हूं।
आपके प्रश्न का ठीक-ठीक उत्तर नहीं दे रहा है, लेकिन यदि आप अपने स्व-निर्मित आवरण से दूर जा सकते हैं तो जावा (SLF4J) के लिए सरल लॉगिंग मुखौटा है जिसे अब हाइबरनेट (कॉमन्स लॉगिंग के बजाय) बदल दिया गया है।
SLF4J जकार्ता कॉमन्स लॉगिंग (JCL) के साथ देखे गए किसी भी वर्ग लोडर समस्या या मेमोरी लीक से ग्रस्त नहीं है।
SLF4J JDK लॉगिंग, log4j और लॉगबैक का समर्थन करता है। तो फिर समय सही होने पर लॉग 4 जे से लॉगबैक पर स्विच करना काफी आसान होना चाहिए।
संपादित करें: अपने आप को स्पष्ट नहीं करने वाली आपत्तियाँ। मैं SLF4J का उपयोग करने का सुझाव दे रहा था ताकि खुद को log4j या logback के बीच एक कठिन चुनाव करने से अलग कर सकूं।
आपका निर्णय आधारित होना चाहिए
आपको एपीआई को बदलने का आग्रह सिर्फ इसलिए करना चाहिए क्योंकि यह "नया, बेहतर, बेहतर है।" मैं "अगर यह टूटा नहीं है, तो इसे लात मत मारो" की नीति का पालन करें।
यदि आपके एप्लिकेशन को बहुत परिष्कृत लॉगिंग फ़्रेमवर्क की आवश्यकता है, तो आप इस पर विचार करना चाह सकते हैं।
परिपक्व परियोजना या यहां तक कि विकास के चरणों में गहरी परियोजना शायद इस तरह के उन्नयन, आईएमएचओ से लाभ से अधिक ढीली होगी। लॉगबैक निश्चित रूप से अंकों की एक सरणी में अधिक उन्नत है, लेकिन एक कार्य प्रणाली में पूर्ण प्रतिस्थापन के लिए एक सीमा तक नहीं। मैं निश्चित रूप से एक नए विकास के लिए लॉगबैक पर विचार करूंगा, लेकिन मौजूदा log4j काफी अच्छा है और पहले से जारी और मिले हुए उपयोगकर्ता के लिए कुछ भी परिपक्व है। यह बहुत व्यक्तिपरक है, आपको लागत स्वयं देखनी चाहिए।