SLF4J / लॉगबैक में मार्कर का उपयोग करने के लिए सर्वोत्तम अभ्यास


127

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

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

मुझे इस बात में विशेष दिलचस्पी है कि लॉगिंग के लिए कहां, क्यों और कैसे एक [1] मार्कर का उपयोग किया जाएगा । वे मुझे लॉगिंग में शब्दार्थ संदर्भ जोड़ने के लिए एक बहुत साफ सुविधा के रूप में हड़ताल करते हैं - उदाहरण के लिए जब एक वर्ग कई चिंताओं को संभाल सकता है, तो कोई लॉग स्टेटमेंट में भेदभाव करने के लिए कार्य / चिंता विशिष्ट मार्कर का उपयोग कर सकता है।

लॉगिंग में मार्कर बनाने और उपयोग करने के लिए सबसे अच्छा अभ्यास, कन्वेंशन या रणनीति क्या हो सकती है।

अपडेट: मुझे लगता है, जो मैं वास्तव में हूं उसके बाद मार्करों का उपयोग करने के लिए इतना क्यों नहीं है , बल्कि यह है कि कैसे भाग - नामकरण मार्करों के कुछ अच्छे अभ्यास हैं (जैसे रिक्त स्थान या डैश / अंडरस्कोर / विराम चिह्न के साथ सादे पाठ का उपयोग करना) कीवर्ड नाम ), वहाँ "मानक नाम" के पूल के कुछ प्रकार होना चाहिए, व्यावसायिक कार्यों के आधार पर सामान नामकरण। जिन सवालों का मैं शायद खुद से पता लगा सकता हूं, लेकिन अगर मैं इन सुविधाओं का व्यवस्थित रूप से उपयोग करना चाहता हूं और उन्हें डेवलपर्स की एक टीम से मिलवाना चाहता हूं, तो यह समझ में आता है कि चारों ओर दिशानिर्देशों के कुछ औपचारिक सेट हैं ...


[१] - उपयोग करने का तरीका पूछकर मार्करों मैं वास्तव में एपीआई का उपयोग करने का तरीका नहीं पूछ रहा हूं (यह वास्तव में बहुत सीधा है) - मैं अधिक सामान्य स्तर का जिक्र कर रहा हूं कि कोई लगातार मार्करों का उपयोग करते हुए कैसे प्रवेश कर रहा है।

जवाबों:


98

सबसे पहले, जैसा @ दारियो ने कहा:

  • MDC का उपयोग कुछ "संस्थाओं" के साथ कई घटनाओं को जोड़ने के लिए किया जाता है
  • [मार्कर] "विशेष" घटनाओं के लिए उपयोग किया जाता है जिन्हें आप सामान्य लोगों से फ़िल्टर करना चाहते हैं

तो आपका दावा है कि आप इसके लिए एमडीसी का उपयोग करना चाहते हैं। मार्कर "विशेष" घटनाओं को उजागर करने के लिए हैं - फ़िल्टरिंग, यदि आप करेंगे - "स्लाइसिंग" के बजाय। उदाहरण के लिए, आप किसी विशेष उपयोगकर्ता के आधार पर स्लाइस कर सकते हैं, लेकिन किसी अप्रत्याशित अपवाद के आधार पर फ़िल्टर कर सकते हैं। इस स्थिति में, आप एक उपयोगकर्ता MDC आयाम और एक अनपेक्षित अपवाद मार्कर बनाएँगे ।


लेकिन यह स्पष्ट रूप से आपके मन में आए प्रश्न को संबोधित नहीं करता है। आप "लगातार मार्करों का उपयोग करके किसी एक को लॉग करने के तरीके के बारे में अधिक सामान्य स्तर का उल्लेख कर रहे हैं।" तो चलिए जानते है कि:

एमडीसी स्लाइसिंग और डाइशिंग के लिए है , और मार्कर फ़िल्टरिंग के लिए हैंइन गतिविधियों को परीक्षण के दौरान और उत्पादन में किया जाता है । जैसे, आपको यह तय करने की जरूरत है कि लॉग डेटा को स्लाइस करने के लिए आपको कौन से आयामों की अपेक्षा उपयोगी हो सकती है, और परीक्षण / उत्पादन के आसपास आने पर कौन से मामलों में इसे फ़िल्टर करना उपयोगी हो सकता है। प्रत्येक आयाम को एमडीसी आयाम मिलता है। प्रत्येक मामले को एक मार्कर मिलता है। यह इतना सरल है।

डेवलपर्स को यहां कोई निर्णय लेने की आवश्यकता नहीं है। एक व्यक्ति या टीम को यह तय करना चाहिए कि डिजाइनिंग के समय , किस तरह के स्लाइसिंग, डिपिंग और फ़िल्टरिंग का समर्थन किया जाना चाहिए। यह कल्पना करके सूचित किया जाना चाहिए कि किस प्रकार के विश्लेषण कार्यों से उम्मीद है कि उन्हें प्रदर्शन करने के लिए कहा जा सकता है।

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

जहां तक ​​एक नीति पर निर्णय लेने का अर्थ है, इसका अर्थ है परिभाषित करना जिसमें किसी दिए गए मार्कर या एमडीसी आयाम को नियोजित करने की आवश्यकता होती है । इसे कसकर रखें (केंद्रीकृत, जानबूझकर), लेकिन डेवलपर्स से प्रतिक्रिया की अनुमति दें यदि उन्हें लगता है कि आयाम और मार्कर का सेट हाथ में काम के लिए अपर्याप्त है। उपयुक्त के रूप में आयामों और / या विशेषताओं को संशोधित / जोड़ें।

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


7
बहुत बढ़िया जवाब। मेरा तर्क है कि एमडीसी जो एक थ्रेड आधारित डेटा संरचना है, जिसका उपयोग फ़िल्टरिंग के लिए भी किया जा सकता है।
Ceki

बहुत बढ़िया जवाब। लेकिन ईएसएल कर्मचारी क्या है ?
डेराइक

धन्यवाद। इंग्लिश दूसरी भाषा के तोर पर।
user359996

76

सबसे पहले, एमडीसी।

एमडीसी वास्तव में एक ऐसे वातावरण में उपयोगी है, जहां आपके पास एक "इकाई" है जो कुछ व्यवहार से जुड़ी है। एक विशिष्ट उदाहरण: उपयोगकर्ता वेब अनुप्रयोग के साथ सहभागिता करता है। तो, मान लें कि आपके पास अपने वेब ऐप के साथ कई उपयोगकर्ता गड़बड़ कर रहे हैं। एमडीसी का उपयोग करके, आप बहुत अधिक परेशानी के बिना आसानी से उन्हें ट्रैक कर सकते हैं। सरलीकृत उदाहरण:

...[Sandy][abcd] clicked on "change profile"
...[Joe][1234] clicked on "weather reports"
...[Joe][1234] clicked on "Europe"
...[Sandy][abcd] clicked on "logout"
...[Joe][1234] clicked on "logout"
...[Sandy][efgh] logged in

यहां, आप दो स्थानों पर MDC का उपयोग कर रहे हैं: उपयोगकर्ता नाम और सत्र ID के लिए। इस तरह, आप आसानी से एक उपयोगकर्ता के सत्र को देख सकते हैं जो वे सब कुछ कर रहे हैं।

दूसरा, मार्कर।

मार्कर आमतौर पर "विशेष" परिस्थितियों के लिए उपयोग किए जाते हैं, जैसे कि कुछ गंभीर रूप से महत्वपूर्ण त्रुटियों के लिए एक व्यवस्थापक को एक ईमेल भेजना। सभी त्रुटियां हमेशा एक ही श्रेणी में नहीं आती हैं; कुछ को उचित तरीके से निपटाया जाना चाहिए।

या, जब कोई उपयोगकर्ता आपकी सेवा से बाहर निकलता है, तो यह आमतौर पर एक INFO लॉग में जाता है, लेकिन आप ऐसे उदाहरणों के लिए एक मार्कर का उपयोग भी कर सकते हैं, यदि आप चाहते हैं कि इस तरह की घटनाएं एक अलग लॉग फ़ाइल में जाएं, तो आप इसकी निगरानी कर सकते हैं छोड़ने वाले उपयोगकर्ताओं की सांख्यिकीय सभा के लिए और अधिक आसानी से।

अंगूठे का नियम:

  • MDC का उपयोग कुछ "संस्थाओं" के साथ कई घटनाओं को जोड़ने के लिए किया जाता है
  • मार्कर का उपयोग "विशेष" घटनाओं के लिए किया जाता है जिन्हें आप सामान्य लोगों से फ़िल्टर करना चाहते हैं

3
यह एक अच्छा जवाब है, लेकिन यह केवल मार्करों का उपयोग करने के लिए एक संभव उपयोग के मामले को कवर करता है। जिस तरह से मैं इसे देखता हूं, लॉगिंग फ्रेमवर्क फीचर्स (जैसे एमडीसी और मार्कर) मौजूद हैं बाद के स्लाइसिंग और डिसिंग के लिए अधिक मेटाडेटा प्रदान करने के लिए (जैसे कि एडमिन ईमेल या आपके द्वारा उल्लिखित अलग लॉगिंग केस)। मुझे क्या लगता है, मैं था कि वास्तव में मार्कर बनाने के लिए कैसे था (क्या मार्करों का "मानक पूल" होना चाहिए, क्या ध्यान में रखने के लिए कुछ नामकरण परंपराएं हैं, आदि)
रोलाण्ड टीपीपी

3
@ रोलैंड: मैंने कुछ उदाहरण जोड़े हैं, लेकिन मैं सभी उदाहरणों को जोड़ नहीं सकता, क्योंकि वे परिभाषा से असीम हैं। यदि आप मार्करों की प्रेरणा और कारण को समझते हैं, तो उनका उपयोग केवल आपकी कल्पना, और सामान्य ज्ञान द्वारा सीमित है।
दारियो

32

मार्करों का उपयोग एकल लॉग स्टेटमेंट को कलर या मार्क करने के लिए किया जा सकता है । आप इन रंगों के साथ क्या करते हैं, यानी मार्कर पूरी तरह से आपके ऊपर है। हालाँकि, मार्कर के उपयोग के लिए दो पैटर्न सामान्य (दूसरे से पहले अधिक सामान्य) प्रतीत होते हैं।

  1. ट्रिगरिंग : कुछ ऐपेंडर को एक निश्चित मार्कर की उपस्थिति में कार्रवाई करने का निर्देश दिया जा सकता है। उदाहरण के लिए, लॉग स्तर की परवाह किए बिना मार्कर SMTPAppenderके साथ लॉगिंग इवेंट चिह्नित NOTIFY_ADMINकिए जाने पर ईमेल भेजने के लिए कॉन्फ़िगर किया जा सकता है। लॉगबैक दस्तावेज़ में मार्कर-आधारित ट्रिगर देखें । आप ट्रिगर करने के लिए लॉग स्तर और मार्कर को भी जोड़ सकते हैं।

  2. फ़िल्टरिंग : आप उदाहरण के लिए रंग "डीबी" रंग के साथ अपने सभी दृढ़ता से संबंधित लॉग (विभिन्न और कई वर्ग फ़ाइलों में) को चिह्नित कर सकते हैं। फिर आप "DB" के लिए फ़िल्टर कर सकते हैं: DB के साथ चिह्नित लॉग स्टेटमेंट्स को छोड़कर लॉगिंग को अक्षम करें। अधिक जानकारी (MarkerFilter के लिए खोज) के लिए लॉगबैक प्रलेखन में फिल्टर पर अध्याय देखें ।


11

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

यहां देखें विवरण:

https://github.com/logstash/logstash-logback-encoder#loggingevent_custom_event

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.