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

From Vigyanwiki

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

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

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

कार्यक्षमता अवलोकन

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

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

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

लोगर

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

नाम

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

उदाहरण के लिए, लोगर का नाम हो सकता हैcom.sun.some.UsefulClass. निम्नलिखित में से किसी के लिए संचालक को परिभाषित किया जा सकता है:

  • com
  • com.sun
  • com.sun.some
  • com.sun.some.UsefulClass

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

गंभीरता स्तर

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

सामान्य स्तर
स्तर विवरण
घातक गंभीर त्रुटियाँ जो समय से पहले समाप्ति का कारण बनती हैं। अपेक्षा करें कि ये स्टेटस कंसोल पर तत्काल दिखाई दें।
त्रुटि अन्य रनटाइम त्रुटियाँ या अनपेक्षित स्थितियाँ। अपेक्षा करें कि ये स्टेटस कंसोल पर तत्काल दिखाई दें।
चेतावनी पदावनत API का उपयोग, API का खराब उपयोग, 'लगभग' त्रुटियाँ, अन्य रनटाइम स्थितियाँ जो अवांछनीय या अप्रत्याशित हैं, किन्तु आवश्यक रूप से "गलत" नहीं हैं। अपेक्षा करें कि ये स्टेटस कंसोल पर तत्काल दिखाई दें।
जानकारी रोचक रनटाइम परिणाम (स्टार्टअप/शटडाउन)। अपेक्षा करें कि ये तत्काल एक कंसोल पर दिखाई देंगे, इसलिए रूढ़िवादी रहें और न्यूनतम रखें।
डीबग सिस्टम के माध्यम से प्रवाह पर विस्तृत जानकारी। उम्मीद है कि इन्हें केवल लॉग में लिखा जाएगा।
चिह्न अधिक विस्तृत जानकारी। उम्मीद है कि इन्हें केवल लॉग में लिखा जाएगा।

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

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

फ़िल्टर

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

फ़ॉर्मेटर्स, लेआउट या रेंडरर्स

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

परिशिष्ट या हैंडलर

परिशिष्ट निर्दिष्ट न्यूनतम गंभीरता स्तर पर या उससे ऊपर के संदेशों को सुनते हैं। परिशिष्ट पारित संदेश लेता है और इसे उचित रूप से पोस्ट करता है। संदेश स्वभाव में सम्मलित हैं:

  • कंसोल पर प्रदर्शित करें
  • फ़ाइल या syslog में लिखें
  • डेटाबेस तालिका में संलग्न करें
  • जावा संदेश सेवा के माध्यम से वितरित करें
  • ईमेल द्वारा भेजें
  • सॉकेट पर लिखें
  • बिट-बकेट (/ dev/null) को छोड़ दें

फीचर तुलना

Table 1 - Features
Framework Type Supported Log स्तरs Standard Appenders Comments Cost / Licence
Log4j Logging Framework FATAL ERROR WARN INFO DEBUG TRACE Too many to list: See Appender Documentation Widely used in many projects and platforms. Log4j 1 was declared "End of Life" in 2015 and has been replaced with Log4j 2 which provides an API that can be used with other logging implementations as well as an implementation of that API.
Apache License, Version 2.0
Java Logging API Logging Framework SEVERE WARNING INFO CONFIG FINE FINER FINEST Sun's default Java Virtual Machine (JVM) has the following: ConsoleHandler, FileHandler, SocketHandler, MemoryHandler Comes with the JRE
tinylog Logging Framework ERROR WARNING INFO DEBUG TRACE ConsoleWriter, FileWriter, LogcatWriter, JdbcWriter, RollingFileWriter, SharedFileWriter and null (discards all log entries) [1] Apache License, Version 2.0
Logback Logging Framework ERROR WARN INFO DEBUG TRACE Too many to list: see Appender JavaDoc Developed as a replacement for Log4j, with many improvements. Used by numerous projects, typically behind slf4j, for example Akka, Apache Camel, Apache Cocoon, Artifactory, Gradle, Lift Framework, Play Framework, Scalatra, SonarQube, Spring Boot, ... LGPL, Version 2.1
Apache Commons Logging (JCL) Logging Wrapper FATAL ERROR WARN INFO DEBUG TRACE Depends on the underlying framework Widely used, often in conjunction with Log4j Apache License, Version 2.0
SLF4J Logging Wrapper ERROR WARN INFO DEBUG TRACE Depends on the underlying framework, which is pluggable. Provides API compatible shims for JCL, JDK and Log4j logging packages. It can also use any of them to generate output. Defaults to using Logback for output if available. Widely used in many projects and platforms, frequently with Logback as the implementation. MIT License


विचार

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

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

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

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


यह भी देखें

संदर्भ

  1. "User manual of tinylog".[permanent dead link]
  2. Log4j2 API Messages
  3. Java 8 Lambda support for lazy logging
  4. Avoiding Commons Logging
  5. Spring Logging Overview
  6. java.util.logging Overview


बाहरी संबंध