आगे बढ़ो: slf4j के बजाय log4j2 एपीआई के लिए कार्यक्रम
यह सुरक्षित है: Log4j2 एपीआई slf4j के रूप में सटीक गारंटी प्रदान करता है - और अधिक।
अब जब Log4j2 खुद ही एक एपीआई और एक कार्यान्वयन मॉड्यूल में अलग हो गया है, तो SLF4J का उपयोग करने में कोई मूल्य नहीं है।
हां, अपने विकल्पों को खुला रखना अच्छा इंजीनियरिंग अभ्यास है। आप बाद में किसी अन्य लॉगिंग कार्यान्वयन में बदलना चाहते हैं।
पिछले 10 वर्षों से, आपके एप्लिकेशन में इस तरह के लचीलेपन के निर्माण का मतलब SLF4J जैसे रैपर एपीआई का उपयोग करना है। यह लचीलापन हालांकि मुफ्त में नहीं आता है: इस दृष्टिकोण का नुकसान यह है कि आपका एप्लिकेशन अंतर्निहित लॉगिंग लाइब्रेरी के समृद्ध सुविधा सेट का उपयोग नहीं कर सकता है।
Log4j2 एक समाधान प्रदान करता है जिसके लिए यह आवश्यक नहीं है कि आपका आवेदन सबसे कम आम भाजक तक सीमित हो।
एस्केप वाल्व: log4j-to-slf4j
Log4j2 में एक log4j-to-slf4j
ब्रिज मॉड्यूल शामिल है । Log4j2 एपीआई के खिलाफ कोड किए गए किसी भी एप्लिकेशन को किसी भी समय किसी भी slf4j-अनुरूप कार्यान्वयन के लिए बैकिंग कार्यान्वयन को स्विच करने का विकल्प चुन सकते हैं।
जैसा कि सवाल में कहा गया है, Log4j2 API का उपयोग करना सीधे अधिक कार्यक्षमता प्रदान करता है और इसमें कुछ गैर-कार्यात्मक फायदे हैं जैसे कि slf4j जैसे रैपर एपीआई का उपयोग करना:
- संदेश एपीआई
- आलसी लॉगिंग के लिए लैम्ब्डा
- केवल स्ट्रिंग्स के बजाय किसी भी ऑब्जेक्ट को लॉग करें
- कचरा-मुक्त: जहाँ भी संभव हो, वेरगेज बनाने या स्ट्रिंग्स बनाने से बचें
- जब आप उनके साथ समाप्त हो जाते हैं, तब CloseableThreadContext MDC से आइटम स्वचालित रूप से हटा देता है
( अधिक जानकारी के लिए SLF4J में उपलब्ध 10 लॉग 4j2 एपीआई सुविधाएँ देखें।)
अनुप्रयोग सुरक्षित रूप से Log4j2 API की इन समृद्ध विशेषताओं का उपयोग मूल लॉग 4j2 कोर कार्यान्वयन के लिए बंद किए बिना कर सकते हैं।
SLF4J अभी भी आपका सुरक्षा वाल्व है, इसका मतलब यह नहीं है कि आपके आवेदन को अब SLF4J API के विरुद्ध कोड होना चाहिए।
प्रकटीकरण: मैं Log4j2 में योगदान देता हूं।
अद्यतन: वहाँ कुछ भ्रम है कि Log4j2 एपीआई के लिए प्रोग्रामिंग किसी भी तरह "एक मुखौटा के लिए मुखौटा" पेश करता है। इस संबंध में Log4j2 एपीआई और SLF4J के बीच कोई अंतर नहीं है।
मूल कार्यान्वयन का उपयोग करते समय दोनों APIs को 2 निर्भरता की आवश्यकता होती है, और गैर-देशी कार्यान्वयन के लिए 4 निर्भरता। SLF4J और Log4j2 API इस संबंध में समान हैं। उदाहरण के लिए:
slf4j
और लॉगबैक (या log4jv1)? क्या मुझे आपके आवेदन का उपयोग करने के लिए तीसरे लकड़हारे को स्थापित करने के लिए मजबूर होना चाहिए? या हो सकता है कि कॉर्पोरेट सुरक्षा का फैसला आप केवलjava.util.logging
उत्पादन में उपयोग कर सकते हैं , तब क्या?