के साथ इसका उपयोग करते हैं तो हम log4j2 की सभी सुविधाओं का उपयोग कर सकते हैं। हमने जेनेरिक एपिस का उपयोग करने के लिए slf4 apis का उपयोग करने के लिए हमारे सभी कोड माइग्रेट कर दिए हैं, हालांकि अब हम log4j 1.x से log4j 2.x में अपग्रेड करने की सोच रहे हैं । क्या हम log4j2 की सभी सुविधाओं का उपयोग करने में सक्षम होंगे अगर हम sl44 api और कार्यान्वयन log4j2 के रूप में उपयोग करते हैं?यदि हम slf4j api
उत्तर
Log4j2 एपीआई SLF4J एपीआई से अमीर है, और कई Log4j2 एपीआई सुविधाओं SLF4J के माध्यम से सुलभ नहीं हैं। विवरण के लिए नीचे देखें।
लॉग 4j2 कार्यान्वयन की विशेषताएं, जैसे असिंक लॉगर्स, लुकअप, फ़िल्टर, लेआउट और परिशिष्ट कॉन्फ़िगरेशन के साथ नियंत्रित होते हैं और आपके एप्लिकेशन में उपयोग किए जाने वाले लॉगिंग एपीआई के बावजूद उपलब्ध हैं।
के विभिन्न लेकिन संबंधित प्रश्नों के लिए कृपया answer को भी देखें, यह लॉग 4j2 API पर प्रोग्राम करने के लिए सुरक्षित क्यों है।
10 Log4j2 एपीआई SLF4J में उपलब्ध नहीं सुविधाएँ
(1) Message API अनुप्रयोगों केवल पाठ के अलावा संरचित वस्तुओं लॉग इन करने की अनुमति देता है। आंतरिक रूप से Log4j2 किसी संदेश में लॉग इन की गई सभी चीज़ों को परिवर्तित करता है, और इसे एपीआई में उजागर करने के लिए अनुप्रयोगों के लिए डाउनस्ट्रीम लॉगिंग घटकों (फ़िल्टर, लेआउट, एपेंडर) के साथ बातचीत करने के लिए सभी प्रकार की संभावनाएं खुलती हैं। यह उपयोगी हो सकता है यदि आप कस्टम घटक को Log4j2 के प्लगइन के रूप में विकसित कर रहे हैं, साथ ही जब आप अंतर्निर्मित लोगों का उपयोग कर रहे हों। एक अंतर्निहित उदाहरण के लिए, StructuredDataMessage का उपयोग Rfc5424Layout पर ठीक-ठीक नियंत्रण के लिए किया जाता है।
(2) जावा 8 lambda support आपको अनुरोधपूर्वक लॉग स्तर सक्षम होने पर स्पष्ट रूप से जांच किए बिना पैरामीटर बनाने या संदेशों को लॉग इन करने की अनुमति देता है।
// Java-8 style optimization: no need to explicitly check the log level:
// the lambda expression is not evaluated if the TRACE level is not enabled
logger.trace("Some long-running operation returned {}",() -> expensiveOperation());
(3) मिश्रण {} स्ट्रिंग के साथ शैली मापदंडों :: प्रारूप %s %d
शैली मानकों। {} शैली में बेहतर प्रदर्शन होता है और इसका उपयोग किसी भी पैरामीटर प्रकार के साथ किया जा सकता है, लेकिन printf
शैली प्रारूपण पर ठीक दाग नियंत्रण प्रदान करती है। Log4j2 आपको इन पैरामीटर शैलियों को आसानी से मिश्रण करने की अनुमति देता है। उदाहरण के लिए:
logger.debug("Opening connection to {}...", someDataSource);
logger.printf(Level.INFO, "Logging in user %1$s with birthday %2$tm %2$te,%2$tY", user.getName(), user.getBirthdayCalendar());
(4) CloseableThreadContext SLF4J में सामान्य ThreadContext (MDC) पर कुछ अतिरिक्त सुविधा प्रदान करता है: यह स्वचालित रूप से आइटम को हटा आपका काम पूरा हो। उदाहरण के लिए:
// Add to the ThreadContext map for this try block only;
try (final CloseableThreadContext.Instance ctc = CloseableThreadContext
.put("id", UUID.randomUUID().toString())
.put("loginId", session.getAttribute("loginId"))) {
logger.debug("Message 1");
// call some other code that also does logging
...
logger.debug("Message 2");
...
} // "is" and "loginId" are now removed from the ThreadContext map
(5) Log4j2 के ThreadContext, कुंजी-मान जोड़ों के अलावा, यह भी push
और pop
तरीकों ढेर कार्यक्षमता (क्या log4j 1 में एनडीसी कहा जाता था) का समर्थन किया है।
(6) SLF4J FATAL लॉग स्तर का समर्थन नहीं करता है।
(7) Log4j2 custom log levels के लिए समर्थन है। इन्हें log
विधियों के साथ उपयोग किया जा सकता है, उदाहरण के लिए: logger.log(Level.getLevel("FINE"), "... msg")
, या आप अपने कस्टम लॉग स्तर के लिए सुविधा विधियों के साथ एक कस्टम लॉगर रैपर उत्पन्न कर सकते हैं।
(8) Log4j2 API किसी भी ऑब्जेक्ट को स्वीकार करता है, केवल स्ट्रिंग्स नहीं। यह उन चीजों में से एक है जो Log4j2 को "garbage-free" होने की अनुमति देते हैं, जिसका अर्थ है कि यह नए ऑब्जेक्ट्स को आवंटित करने से बच जाएगा। आपका ऑब्जेक्ट किसी भी अस्थायी स्ट्रिंग्स के बिना लॉग इन किया गया है यदि यह संख्या है, एक CharSequence या जब यह (Log4j2) स्ट्रिंगबिल्डर Formattable इंटरफ़ेस लागू करता है।
लॉग 4j2 एपीआई अगर आप 10 पैरामीटर या उससे कम लॉग इन करते हैं तो vararg arrays बनाने से भी बचेंगे। यदि आप 2 से अधिक पैरामीटर लॉग करते हैं तो SLF4J vararg arrays बनाता है।
(9) उपरोक्त आप सीधे लॉग 4j2 एपीआई का उपयोग करके मुफ्त में आते हैं। उस पर, यदि आप वास्तव में अस्थायी वस्तुओं (जैसे कुछ इंटरैक्टिव गेम और कम विलंबता वित्तीय अनुप्रयोग करते हैं) बनाने से बचने की परवाह करते हैं, तो आप Unbox उपयोगिता वर्ग के साथ ऑटो-मुक्केबाजी आदिम पैरामीटर से बच सकते हैं।
(10) एसएलएफ 4 जे मार्करों के मोटे अनाज वाले सिंक्रनाइज़ेशन के उपयोग से बहु-थ्रेडेड अनुप्रयोगों (SLF4J-240) के लिए प्रदर्शन प्रभाव हो सकता है। इस performance test results पृष्ठ का उन्नत फ़िल्टरिंग अनुभाग देखें।
अस्वीकरण: मैं Log4j2 में योगदान देता हूं।
- 1. SLF4J: slf4j-api 1.6.x (या बाद में) इस बाध्यकारी
- 2. यदि हम वसंत एमवीसी
- 3. slf4j
- 4. slf4j
- 5. बल slf4j
- 6. log4j2 और slf4j
- 7. SLF4J varargs विधि
- 8. SLF4J बाध्यकारी त्रुटि
- 9. इंटरसेप्ट लॉग संदेश slf4j
- 10. सीधे SLF4J
- 11. SLF4j/log4j
- 12. slf4j एपीआई
- 13. सिस्टम के slf4j बाध्यकारी
- 14. लॉगिंग के लिए SLF4J
- 15. NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
- 16. redfe log4j slf4j
- 17. SLF4J NoSuchMethodError पर स्थान AwareLogger
- 18. कक्षा पथ कई SLF4J बाइंडिंग त्रुटि
- 19. SLF4J varargs मार्कर
- 20. slf4j लॉगबैक विकल्प लॉगर
- 21. slf4j बिना स्ट्रिंग()
- 22. ServletContextListener और SLF4J
- 23. slf4j लॉगिंग सिंटैक्स
- 24. Log4J के साथ SLF4J को कैसे बांधें?
- 25. कैसे SLF4J/JPA/JAX-RS उनके कार्यान्वयन को ढूंढते हैं?
- 26. क्या अभी तक slf4j के लिए जावा 1.5 varargs API है?
- 27. SLF4J फ़ाइल बनाम डीबी बनाम सोलर
- 28. क्या होता है यदि हम अपरिभाषित मूल्य निर्धारित करते हैं?
- 29. क्या कोई समस्या है यदि हम mysql node js मॉड्यूल
- 30. SLF4J लॉग स्तर एक तर्क के रूप
धन्यवाद सभी आईपी के लिए रेमो। अंक जो आपने इंगित किया है। – Mayur
कृपया ध्यान दें कि एसएलएफ 4 जे -240 अंततः तय किया गया था और एसएलएफ 4 जे 1.7.24 में होगा। अस्वीकरण - मैं Log4j 2 में भी योगदान देता हूं। – rgoers