यह लाइब्रेरी क्या है और क्यों ज़रूरी है?
Log4j 2 और SLF4J — ये दो आपस में जुड़ी हुई Java लॉगिंग लाइब्रेरीज़ हैं, जो एंटरप्राइज़ डेवलपमेंट की दुनिया में डी-फैक्टो स्टैंडर्ड मानी जाती हैं। SLF4J (Simple Logging Facade for Java) एक फेसाड (एब्स्ट्रैक्शन) है जो अलग-अलग लॉगिंग फ्रेमवर्क के लिए एक समान API प्रदान करता है। Log4j 2 इस API का सबसे पावरफुल और हाई-परफॉर्मेंस इम्प्लीमेंटेशन है।
इसकी ज़रूरत क्यों है? लॉगिंग का मतलब है एप्लिकेशन के काम करने की जानकारी रिकॉर्ड करना: एरर, वॉर्निंग, इन्फॉर्मेशनल मैसेज, डीबग इन्फॉर्मेशन। लॉगिंग सिस्टम के बिना डेवलपर्स को System.out.println() का इस्तेमाल करना पड़ता है, जिससे ये समस्याएं आती हैं:
- आउटपुट को फ्लेक्सिबल तरीके से मैनेज नहीं कर सकते (एप्लिकेशन के अलग-अलग हिस्सों के लिए लॉग ऑन/ऑफ करना)
- लॉगिंग लेवल (INFO, WARN, ERROR, DEBUG) का अभाव
- परफॉर्मेंस की समस्या (लॉग बंद होने पर भी स्ट्रिंग कॉन्केटनेशन होता है)
- आउटपुट फॉर्मेट का अभाव (डेट, टाइम, क्लास नेम, थ्रेड)
Log4j 2 इन सभी समस्याओं को हल करता है। यह एसिंक्रोनस लॉगिंग, फिल्टर, अपेंडर (फाइल, कंसोल, डेटाबेस, नेटवर्क में आउटपुट), लॉग रोटेशन और कई अन्य एडवांस्ड फीचर्स को सपोर्ट करता है। SLF4J आपको बिना कोड बदले Log4j 2 से Logback या java.util.logging पर स्विच करने की सुविधा देता है।
इंस्टॉलेशन
Java प्रोजेक्ट्स में इंस्टॉलेशन Maven या Gradle बिल्ड सिस्टम के ज़रिए किया जाता है। Python (pip) या Node.js (npm) के विपरीत, Java में डिपेंडेंसी मैनेजमेंट कॉन्फ़िगरेशन फाइलों के ज़रिए होता है।
Maven (pom.xml)
<!-- SLF4J API + Log4j 2 इम्प्लीमेंटेशन -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.20.0</version>
</dependency>
<!-- Log4j 2 का मुख्य API (अगर SLF4J इस्तेमाल नहीं कर रहे) -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.20.0</version>
</dependency>
Gradle (build.gradle)
dependencies {
implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0'
implementation 'org.apache.logging.log4j:log4j-core:2.20.0'
}
डिपेंडेंसी जोड़ने के बाद, src/main/resources फोल्डर में log4j2.xml कॉन्फ़िगरेशन फाइल बनाएं:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
कोड उदाहरण के साथ त्वरित शुरुआत
डेमो के लिए एक सरल Java क्लास बनाएं:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class QuickStart {
// मौजूदा क्लास के लिए लॉगर बनाएं
private static final Logger logger = LoggerFactory.getLogger(QuickStart.class);
public static void main(String[] args) {
logger.info("एप्लिकेशन शुरू हो गया है");
logger.debug("यह डीबग मैसेज है");
logger.warn("चेतावनी: संसाधन खत्म हो रहे हैं");
logger.error("गंभीर त्रुटि: {}", "शून्य से भाग");
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
logger.error("गणना में त्रुटि", e);
}
}
}
कंसोल आउटपुट कुछ इस तरह दिखेगा:
14:30:15.123 [main] INFO QuickStart - एप्लिकेशन शुरू हो गया है
14:30:15.125 [main] WARN QuickStart - चेतावनी: संसाधन खत्म हो रहे हैं
14:30:15.125 [main] ERROR QuickStart - गंभीर त्रुटि: शून्य से भाग
14:30:15.126 [main] ERROR QuickStart - गणना में त्रुटि
java.lang.ArithmeticException: / by zero
at QuickStart.main(QuickStart.java:15) पुस्तकालय में भी
C++ अनुप्रयोग कॉन्फ़िगरेशन: लचीली सेटिंग्स के लिए लाइब्रेरी और उपकरण
prometheus/client_golang Go: पूर्ण गाइड उदाहरणों के साथ
जावा में CSV के साथ कार्य: OpenCSV, Apache Commons CSV और Java Scanner लाइब्रेरीज़