जावा लॉगिंग फ्रेमवर्क

जावा लॉगिंग फ्रेमवर्क जावा प्लेटफॉर्म के लिए  कंप्यूटर डेटा लॉगिंग पैकेज है। यह लेख सामान्य उद्देश्य लॉगिंग फ्रेमवर्क को कवर करता है।

लॉगिंग एप्लिकेशन द्वारा गतिविधि की रिकॉर्डिंग को संदर्भित करता है और विकास टीमों के लिए  सामान्य समस्या है। लॉगिंग फ्रेमवर्क जावा प्लेटफॉर्म के लिए लॉगिंग की प्रक्रिया को सरल  और मानकीकृत करता है। विशेष रूप से वे कंसोल को स्पष्ट आउटपुट से बचकर लचीलापन प्रदान करते हैं (नीचे परिशिष्ट देखें)। जहाँ लॉग लिखे जाते हैं वे कोड से स्वतंत्र हो जाते हैं और कार्यावधि पर अनुकूलित किए जा सकते हैं।

दुर्भाग्य से जावा विकास किट में इसके मूल प्रकाशन में लॉगिंग सम्मलित नहीं थी इसलिए जब तक जावा लॉगिंग एपीआई को जोड़ा गया तब तक कई अन्य लॉगिंग फ्रेमवर्क व्यापक रूप से उपयोग किए जा चुके थे - विशेष रूप से Apache Commons Logging (जावा कॉमन्स लॉगिंग या जेसीएल के रूप में भी जाना जाता है) और Log4j. इसके कारण अलग-अलग लॉगिंग फ्रेमवर्क का उपयोग करते हुए प्रत्येक अलग-अलग तृतीय-पक्ष पुस्तकालयों (JARs) को एकीकृत करते समय समस्याएँ हुईं। इस समस्या को हल करने के लिए प्लग करने योग्य लॉगिंग फ्रेमवर्क (रैपर) विकसित किए गए थे।

कार्यक्षमता अवलोकन
लॉगिंग को सामान्यतः तीन प्रमुख टुकड़ों में विभाजित किया जाता है: लॉगर, फॉर्मेटर और परिशिष्ट (या हैंडलर)।


 * लोगर कुछ मेटाडेटा के साथ लॉग किए जाने वाले संदेश को अधिकृत करने और इसे लॉगिंग फ्रेमवर्क में पास करने के लिए ज़िम्मेदार है।
 * संदेश प्राप्त करने के बाद, फ्रेमवर्क फॉर्मेटर को संदेश के साथ कॉल करता है जो इसे आउटपुट के लिए प्रारूपित करता है।
 * ढांचा तब स्वरूपित संदेश को उपयुक्त परिशिष्ट संचालक को स्वभाव के लिए सौंप देता है। इसमें कंसोल डिस्प्ले में आउटपुट, डिस्क पर लिखना, डेटाबेस में जोड़ना, या ईमेल बनाना सम्मलित हो सकता है।

|Java Logging Framework by the Object Guy जैसे सरल लॉगिंग फ्रेमवर्क, लॉगर और परिशिष्ट को जोड़ते हैं। यह डिफ़ॉल्ट संचालन को सरल करता है, किन्तु यह कम विन्यास योग्य है, विशेषकर यदि परियोजना को वातावरण में ले जाया जाता है।

लोगर
लोगर  वस्तु है जो एप्लिकेशन को आउटपुट भेजने / संग्रहीत करने के संबंध में बिना लॉग इन करने की अनुमति देता है। एप्लिकेशन किसी दिए गए नाम/पहचानकर्ता के अनुसार  लॉगर वस्तु को वैकल्पिक गंभीरता स्तर के साथ वस्तु या वस्तु और अपवाद हैंडलिंग पास करके संदेश लॉग करता है।

नाम
लोगर का नाम होता है। नाम सामान्यतः  स्तरों को अलग करने वाली अवधि (.) के साथ पदानुक्रमित रूप से संरचित होता है। लॉगिंग करने वाले वर्ग या पैकेज के नाम का उपयोग करने के लिए  सामान्य योजना है। Log4j और Java लॉगिंग API दोनों ही पदानुक्रम को उच्चतर परिभाषित करने वाले संचालकों का समर्थन करते हैं।

उदाहरण के लिए, लोगर का नाम हो सकता है. निम्नलिखित में से किसी के लिए संचालक को परिभाषित किया जा सकता है: जब तक इस स्टैक में कहीं संचालक परिभाषित है, तब तक लॉगिंग हो सकती है। उदाहरण के लिए लॉग इन किया गया संदेश   लोगर,    संचालक द्वारा लिखा जा सकता है। सामान्यतः   वैश्विक संचालक होता है जो किसी लोगर द्वारा उत्पन्न संदेशों को प्राप्त करता है और संसाधित करता है।

गंभीरता स्तर
संदेश निश्चित स्तर पर लॉग किया गया है। सामान्य स्तर के नाम Apache Commons Logging से कॉपी किए गए हैं (चूंकि जावा लॉगिंग एपीआई विभिन्न स्तर के नामों को परिभाषित करता है)।

लॉगिंग फ्रेमवर्क प्रत्येक लोगर के लिए वर्तमान लॉगिंग स्तर को बनाए रखता है। लॉगिंग स्तर को कम या ज्यादा प्रतिबंधात्मक सेट किया जा सकता है। उदाहरण के लिए, यदि लॉगिंग स्तर चेतावनी पर सेट है, तो उस स्तर या उच्चतर के सभी संदेशों को लॉग किया जाता है: त्रुटि और घातक।

लोगर और परिशिष्ट दोनों को गंभीरता का स्तर सौंपा जा सकता है। आउटपुट उत्पन्न करने के लिए दिए गए गंभीरता स्तर के लिए दोनों को सक्षम किया जाना चाहिए। तो डीबग आउटपुट के लिए सक्षम लॉगर आउटपुट उत्पन्न नहीं करेगा यदि संदेश प्राप्त करने वाला संचालक डीबग के लिए भी सक्षम नहीं है।

फ़िल्टर
फ़िल्टर लॉग इवेंट को अनदेखा या लॉग करने का कारण बनता है। सबसे अधिक इस्तेमाल किया जाने वाला फ़िल्टर पिछले अनुभाग में प्रलेखित लॉगिंग स्तर है। लॉगिंग फ्रेमवर्क जैसे कि Log4j 2 और SLF4J भी मार्कर प्रदान करते हैं, जो लॉग ईवेंट से जुड़े होने पर फ़िल्टरिंग के लिए भी उपयोग किए जा सकते हैं। फेंके जा रहे अपवादों, लॉग संदेश के भीतर डेटा, थ्रेडलोकल में डेटा जो लॉगिंग एपीआई के माध्यम से उजागर किया गया है, या कई अन्य तरीकों के आधार पर लॉग इवेंट को स्वीकार या अस्वीकार करने के लिए फ़िल्टर का उपयोग किया जा सकता है।

फ़ॉर्मेटर्स, लेआउट्स या रेंडरर्स
फ़ॉर्मेटर वस्तु है जो किसी दिए गए वस्तु को स्वरूपित करता है। अधिकतर इसमें बाइनरी वस्तु लेना और इसे स्ट्रिंग प्रस्तुति में परिवर्तित करना सम्मलित है। प्रत्येक ढांचा  डिफ़ॉल्ट आउटपुट स्वरूप को परिभाषित करता है जिसे वांछित होने पर ओवरराइड किया जा सकता है।

परिशिष्ट या हैंडलर
परिशिष्ट निर्दिष्ट न्यूनतम गंभीरता स्तर पर या उससे ऊपर के संदेशों को सुनते हैं। परिशिष्ट पारित संदेश लेता है और इसे उचित रूप से पोस्ट करता है। संदेश स्वभाव में सम्मलित हैं:
 * कंसोल पर प्रदर्शित करें
 * फ़ाइल या syslog में लिखें
 * डेटाबेस तालिका में संलग्न करें
 * जावा संदेश सेवा के माध्यम से वितरित करें
 * ईमेल द्वारा भेजें
 * सॉकेट पर लिखें
 * बिट-बकेट (/ dev/null) को छोड़ दें

विचार
JCL और Log4j बहुत आम हैं क्योंकि वे इतने लंबे समय से आसपास हैं और लंबे समय तक एकमात्र विकल्प थे। slf4j के लचीलेपन (नीचे लॉगबैक का उपयोग करके) ने इसे लोकप्रिय विकल्प बना दिया है।

SLF4J लॉगिंग रैपर (या शिम्स) का सेट है जो इसे किसी भी अन्य ढांचे की नकल करने की अनुमति देता है। इस प्रकार एकाधिक तृतीय-पक्ष पुस्तकालयों को  अनुप्रयोग में सम्मलित किया जा सकता है, भले ही प्रत्येक लॉगिंग ढांचे का उपयोग करने के लिए चुना गया हो। हालाँकि सभी लॉगिंग आउटपुट मानक तरीके से उत्पन्न होते हैं, सामान्यतः  लॉगबैक के माध्यम से।

Log4j 2 एपीआई और कार्यान्वयन दोनों प्रदान करता है। एपीआई को अन्य लॉगिंग कार्यान्वयनों के लिए रूट किया जा सकता है जो SLF4J कैसे काम करता है। SLF4J के विपरीत, Log4j 2 API संदेश लॉग करता है अतिरिक्त लचीलेपन के लिए स्ट्रिंग्स के बजाय ऑब्जेक्ट्स और जावा लैम्ब्डा एक्सप्रेशन का भी समर्थन करता है। जेसीएल वास्तव में लॉगिंग ढांचा नहीं है, किन्तु  के लिए  आवरण है। इस प्रकार, इसके नीचे  लॉगिंग ढांचे की आवश्यकता होती है, चूंकि यह स्वयं का उपयोग करने के लिए डिफ़ॉल्ट हो सकता है   लोगर ।

JCL, SLF4J और Log4j 2 API पुन: प्रयोज्य पुस्तकालयों को विकसित करते समय उपयोगी होते हैं जिन्हें एप्लिकेशन द्वारा उपयोग किए जा रहे अंतर्निहित लॉगिंग सिस्टम को लिखने की आवश्यकता होती है। यह विषम वातावरणों में लचीलापन भी प्रदान करता है जहां लॉगिंग ढांचे को बदलने की संभावना है, चूंकि ज्यादातर मामलों में, लॉगिंग ढांचे को चुनने के बाद, परियोजना के जीवन में इसे बदलने की बहुत कम आवश्यकता होती है। SLF4J और Log4j 2 नए होने से लाभान्वित होते हैं और पुराने ढांचे से सीखे गए पाठों का निर्माण करते हैं। इसके अलावा जेसीएल को क्लास-लोडर्स के साथ समस्याएं ज्ञात हैं, यह निर्धारित करते समय कि किस लॉगिंग लाइब्रेरी को लपेटना चाहिए जो अब जेसीएल की जगह ले चुका है। जावा लॉगिंग एपीआई जावा के साथ प्रदान किया गया है। यद्यपि एपीआई तकनीकी रूप से जावा के साथ प्रदान किए गए डिफ़ॉल्ट कार्यान्वयन से अलग है, इसे वैकल्पिक कार्यान्वयन के साथ बदलना चुनौतीपूर्ण हो सकता है, इसलिए कई डेवलपर्स इस कार्यान्वयन को जावा लॉगिंग एपीआई के साथ भ्रमित करते हैं। कॉन्फ़िगरेशन केवल बाहरी फ़ाइलों द्वारा होता है जो फ्लाई पर आसानी से नहीं बदला जाता है (अन्य ढांचे प्रोग्रामेटिक कॉन्फ़िगरेशन का समर्थन करते हैं)। डिफ़ॉल्ट कार्यान्वयन केवल कुछ संचालक और फॉर्मेटर्स प्रदान करता है, जिसका अर्थ है कि अधिकांश उपयोगकर्ताओं को अपना खुद का लिखना होगा।

यह भी देखें

 * SLF4J
 * लॉग4जे
 * लॉगबैक
 * जावोल्यूशन लॉग कॉन्टेक्स्ट संदर्भ प्रोग्रामिंग पर आधारित है (रन-टाइम पर चयन योग्य वास्तविक लॉगिंग फ्रेमवर्क)।
 * कार्यावधि इंटेलिजेंस

बाहरी संबंध

 * Java 6.0 Logging API
 * Commons Logging
 * Protomatter
 * Open Source Logging Tools in Java
 * The Apache 2.0 license.
 * Logback - A successor to the popular Log4j project
 * tinylog - Minimalist logging utility with a static logger
 * Loggifier A tool that inserts logging code into .class, .jar and .ear files
 * JLV - Java logging viewer which is currently available as a plugin for Eclipse IDE
 * Perf4j
 * SLF4J
 * Log4j 2