अपडेट: System.Diagnostics के एक्सटेंशन के लिए, आप चाहते हैं कि लापता श्रोताओं में से कुछ प्रदान करना, CodePlex पर Essential.Diagnostics देखें ( http://essentialdiagnostics.codeplex.com/ )
फ़्रेमवर्क
प्रश्न: आप किन रूपरेखाओं का उपयोग करते हैं?
A: System.Diagnostics.TraceSource, .NET 2.0 में बनाया गया है।
यह अनुप्रयोगों के लिए शक्तिशाली, लचीला, उच्च प्रदर्शन लॉगिंग प्रदान करता है, हालांकि कई डेवलपर्स इसकी क्षमताओं से अवगत नहीं हैं और उनका पूरा उपयोग नहीं करते हैं।
कुछ ऐसे क्षेत्र हैं जहां अतिरिक्त कार्यक्षमता उपयोगी है, या कभी-कभी कार्यक्षमता मौजूद है, लेकिन अच्छी तरह से प्रलेखित नहीं है, हालांकि इसका मतलब यह नहीं है कि पूरे लॉगिंग ढांचे (जिसे एक्स्टेंसिबल होने के लिए डिज़ाइन किया गया है) को फेंक दिया जाना चाहिए और पूरी तरह से कुछ लोकप्रिय विकल्पों की तरह बदल दिया जाना चाहिए। (NLog, log4net, Common.Logging, और यहां तक कि EntLib लॉगिंग)।
अपने आवेदन में लॉगिंग स्टेटमेंट जोड़ने और पहिया का फिर से आविष्कार करने के तरीके को बदलने के बजाय, बस System.Diagnostics फ्रेमवर्क को उन कुछ स्थानों पर विस्तारित करें जहां आपको इसकी आवश्यकता है।
यह मुझे लगता है कि अन्य फ्रेमवर्क, यहां तक कि एंटलीब, सिर्फ़ Not Invented Here Syndrome से पीड़ित हैं, और मुझे लगता है कि उन्होंने समय बर्बाद कर दिया है ताकि पहले से ही पूरी तरह से अच्छी तरह से काम करने वाले बेसिक्स का पुनः आविष्कार कर सकें। कुछ अंतरालों को भरने के बजाय जो मौजूद हैं। संक्षेप में, उनका उपयोग न करें - उनकी आवश्यकता नहीं है।
विशेषताएं जिन्हें आप नहीं जानते होंगे:
- TraceEvent ओवरलोड्स का उपयोग करना जो एक प्रारूप स्ट्रिंग और आर्ग लेते हैं, प्रदर्शन को मदद कर सकते हैं क्योंकि फ़िल्टर के बाद पैरामीटर को अलग-अलग संदर्भों के रूप में रखा जाता है। इसका मतलब यह है कि सिस्टम की पुष्टि होने के बाद पैरामीटर मानों पर ToString () के लिए कोई महंगी कॉल वास्तव में लॉग इन नहीं होगी।
- Trace.CorrelationManager आपको एक ही लॉजिकल ऑपरेशन (नीचे देखें) के बारे में लॉग स्टेटमेंट को सहसंबंधित करने की अनुमति देता है।
- VisualBasic.Logging.FileLogTraceListener लॉग फ़ाइलों को लिखने और फ़ाइल रोटेशन का समर्थन करने के लिए अच्छा है। हालांकि VisualBasic नामस्थान में, यह डीएलएल को शामिल करके आसानी से C # (या अन्य भाषा) प्रोजेक्ट में आसानी से उपयोग किया जा सकता है।
- EventLogTraceListener का उपयोग करते समय यदि आप कई तर्कों और खाली या अशक्त प्रारूप स्ट्रिंग के साथ TraceEvent को कॉल करते हैं, तो Args सीधे EventLog.WriteEntry () में पारित हो जाता है यदि आप स्थानीयकृत संसाधनों का उपयोग कर रहे हैं।
- सेवा ट्रेस व्यूअर टूल (WCF से), सहसंबद्ध लॉग फ़ाइलों की गतिविधि के ग्राफ़ को देखने के लिए उपयोगी है (भले ही आप WCF का उपयोग न कर रहे हों)। यह वास्तव में डिबग जटिल मुद्दों में मदद कर सकता है जहां कई थ्रेड / एक्टीविटी शामिल हैं।
- सभी श्रोताओं को साफ़ करके (या डिफ़ॉल्ट को हटाकर) ओवरहेड से बचें; अन्यथा डिफॉल्ट ट्रेस सिस्टम को सब कुछ पास कर देगा (और उन सभी ToString () ओवरहेड्स को उकसाएगा)।
वे क्षेत्र जिन्हें आप विस्तार से देखना चाहते हैं (यदि आवश्यक हो):
- डेटाबेस ट्रेस श्रोता
- रंगीन कंसोल ट्रेस श्रोता
- MSMQ / ईमेल / डब्ल्यूएमआई ट्रेस श्रोताओं (यदि आवश्यक हो)
- डायनामिक कॉन्फ़िगरेशन परिवर्तन के लिए Trace.Refresh को कॉल करने के लिए एक FileSystemWatcher लागू करें
अन्य सिफारिशें:
संरचित ईवेंट आईडी का उपयोग करें, और एक संदर्भ सूची (उदाहरण के लिए उन्हें एक एनुम में दस्तावेज) रखें।
आपके सिस्टम में प्रत्येक (महत्वपूर्ण) घटना के लिए अद्वितीय ईवेंट आईडी होने से सहसंबंधी और विशिष्ट मुद्दों को खोजने के लिए बहुत उपयोगी है। ईवेंट आईडी का लॉग / उपयोग करने वाले विशिष्ट कोड को वापस ट्रैक करना आसान है, और सामान्य त्रुटियों के लिए मार्गदर्शन प्रदान करना आसान बना सकता है, जैसे त्रुटि 5178 का मतलब है कि आपका डेटाबेस कनेक्शन स्ट्रिंग गलत है, आदि।
ईवेंट आईडी को किसी प्रकार की संरचना का पालन करना चाहिए (ईमेल और HTTP में उपयोग किए गए उत्तर कोड के सिद्धांत के समान), जो आपको विशिष्ट कोड को जाने बिना श्रेणी के आधार पर उनका इलाज करने की अनुमति देता है।
उदा। पहला अंक सामान्य वर्ग को विस्तार दे सकता है: 1xxx का उपयोग 'प्रारंभ' संचालन के लिए किया जा सकता है, सामान्य व्यवहार के लिए 2xxx, गतिविधि अनुरेखण के लिए 3xxx, चेतावनियों के लिए 4xxx, त्रुटियों के लिए 5xxx, 'संचालन रोकें' के लिए 8xxx, घातक त्रुटियों के लिए 9xxx, आदि।
दूसरा अंक क्षेत्र का विस्तार कर सकता है, उदाहरण के लिए डेटाबेस जानकारी के लिए 21xx (डेटाबेस चेतावनी के लिए 41xx, डेटाबेस त्रुटियों के लिए 51xx), गणना मोड के लिए 22xx (गणना चेतावनी आदि के लिए 42xx), दूसरे मॉड्यूल के लिए 23xx इत्यादि।
असाइन किया गया, संरचित ईवेंट आईडी भी आपको फ़िल्टर में उनका उपयोग करने की अनुमति देता है।
प्रश्न: यदि आप ट्रेसिंग का उपयोग करते हैं, तो क्या आप ट्रेस का उपयोग करते हैं। सहसंबंध।
A: Trace.CorrelationManager किसी भी प्रकार के बहु-थ्रेडेड वातावरण में लॉग स्टेटमेंट को सहसंबंधित करने के लिए बहुत उपयोगी है (जो इन दिनों बहुत अधिक है)।
प्रत्येक लॉजिकल ऑपरेशन को सहसंबंधित करने के लिए आपको एक बार एक्टिविटीआईड सेट करने की आवश्यकता है।
प्रारंभ / रोकें और LogicalOperationStack को सरल स्टैक-आधारित संदर्भ के लिए उपयोग किया जा सकता है। अधिक जटिल संदर्भों के लिए (जैसे अतुल्यकालिक संचालन), नए एक्टिविट के लिए TraceTransfer का उपयोग करके (इसे बदलने से पहले), सहसंबंध की अनुमति देता है।
सर्विस ट्रेस व्यूअर टूल गतिविधि ग्राफ (भले ही आप WCF का उपयोग न कर रहे हों) को देखने के लिए उपयोगी हो सकता है।
प्रश्न: क्या आप इस कोड को मैन्युअल रूप से लिखते हैं, या क्या आप इसे करने के लिए किसी प्रकार के पहलू उन्मुख प्रोग्रामिंग का उपयोग करते हैं? एक कोड स्निपेट साझा करने की देखभाल?
A: आप एक स्कोप क्लास बनाना चाह सकते हैं, जैसे LogicalOperationScope, कि (a) जब सेट होता है तो संदर्भ सेट करता है और (b) डिस्पोज़ होने पर संदर्भ को रीसेट करता है।
यह आपको कोड लिखने के लिए अनुमति देता है जैसे कि ऑपरेशन को स्वचालित रूप से लपेटने के लिए:
using( LogicalOperationScope operation = new LogicalOperationScope("Operation") )
{
// .. do work here
}
यदि आवश्यक हो तो स्कोप बनाने के लिए स्कोप पहले एक्टिविटी सेट कर सकता है, StartLogicalOperation पर कॉल करें और फिर TraceEventType.Start मैसेज लॉग करें। डिस्पोज़ करने पर यह एक स्टॉप मैसेज को लॉग कर सकता है, और फिर स्टॉपलोजिकलऑपरेशन को कॉल कर सकता है।
प्रश्न: क्या आप ट्रेस स्रोतों पर किसी प्रकार का दाना प्रदान करते हैं? उदाहरण के लिए, WPF TraceSources आपको विभिन्न स्तरों पर उन्हें कॉन्फ़िगर करने की अनुमति देता है।
एक: हाँ, कई ट्रेस स्रोत उपयोगी / महत्वपूर्ण हैं क्योंकि सिस्टम बड़ा हो जाता है।
जब भी आप संभवतः सभी चेतावनी और ऊपर, या सभी सूचनाओं या उपरोक्त संदेशों को लगातार लॉग इन करना चाहते हैं, तो किसी भी कारण आकार प्रणाली के लिए गतिविधि अनुरेखण (स्टार्ट, स्टॉप, आदि) और वर्बोज़ लॉगिंग की मात्रा बस बहुत अधिक हो जाती है।
केवल एक स्विच होने के बजाय जो इसे या तो चालू या बंद कर देता है, एक समय में आपके सिस्टम के एक खंड के लिए इस जानकारी को चालू करने में सक्षम होना उपयोगी है।
इस तरह, आप आमतौर पर लॉगिंग (सभी चेतावनियों, त्रुटियों, आदि) से महत्वपूर्ण समस्याओं का पता लगा सकते हैं, और फिर अपने इच्छित अनुभागों पर "ज़ूम इन" कर सकते हैं और उन्हें गतिविधि ट्रेसिंग या डीबग स्तर पर सेट कर सकते हैं।
आपके लिए आवश्यक ट्रेस स्रोतों की संख्या आपके आवेदन पर निर्भर करती है, उदाहरण के लिए आप प्रति विधानसभा या आपके आवेदन के प्रमुख भाग में एक ट्रेस स्रोत चाहते हैं।
यदि आपको और भी अधिक ठीक ट्यून नियंत्रण की आवश्यकता है, तो विशिष्ट उच्च वॉल्यूम ट्रेसिंग, जैसे कच्चे संदेश डंप चालू / बंद करने के लिए व्यक्तिगत बूलियन स्विच जोड़ें। (या WCF / WPF के समान एक अलग ट्रेस स्रोत का उपयोग किया जा सकता है)।
आप गतिविधि ट्रेसिंग बनाम सामान्य (अन्य) लॉगिंग के लिए अलग ट्रेस स्रोतों पर भी विचार करना चाह सकते हैं, क्योंकि यह फ़िल्टर को कॉन्फ़िगर करने के लिए थोड़ा आसान बना सकता है कि आप उन्हें कैसे चाहते हैं।
ध्यान दें कि यदि विभिन्न स्रोतों का उपयोग किया जाता है, तब भी संदेशों को सहक्रियात्मक रूप से सहसंबद्ध किया जा सकता है, इसलिए जितनी आवश्यकता हो उतने का उपयोग करें।
श्रोताओं
प्रश्न: आप किस लॉग आउटपुट का उपयोग करते हैं?
यह इस बात पर निर्भर कर सकता है कि आप किस प्रकार का एप्लिकेशन लिख रहे हैं, और किन चीजों को लॉग किया जा रहा है। आमतौर पर अलग-अलग चीजें अलग-अलग जगहों (यानी कई आउटपुट) में जाती हैं।
मैं आमतौर पर आउटपुट को तीन समूहों में वर्गीकृत करता हूं:
(1) ईवेंट - विंडोज ईवेंट लॉग (और ट्रेस फ़ाइलें)
उदाहरण यदि कोई सर्वर / सेवा लिख रहा है, तो विंडोज पर सबसे अच्छा अभ्यास विंडोज इवेंट लॉग का उपयोग करना है (आपके पास रिपोर्ट करने के लिए यूआई नहीं है)।
इस मामले में, सभी घातक, त्रुटि, चेतावनी और (सेवा-स्तर) सूचना घटनाओं को विंडोज इवेंट लॉग में जाना चाहिए। सूचना के स्तर को इस प्रकार के उच्च स्तरीय घटनाओं के लिए आरक्षित किया जाना चाहिए, जिन्हें आप इवेंट लॉग में जाना चाहते हैं, जैसे "सेवा प्रारंभ", "सेवा बंद", "एक्सज़ से जुड़ा", और शायद "अनुसूची आरंभ" भी। , "उपयोगकर्ता लॉग ऑन", आदि।
कुछ मामलों में आप ईवेंट में लिखने को अपने एप्लिकेशन के अंतर्निहित भाग में लॉग इन करना चाहते हैं और ट्रेस सिस्टम के माध्यम से नहीं (यानी ईवेंट लॉग प्रविष्टियों को सीधे लिखें)। इसका मतलब यह है कि यह गलती से बंद नहीं किया जा सकता है। (ध्यान दें कि आप अभी भी अपने ट्रेस सिस्टम में उसी घटना को नोट करना चाहते हैं ताकि आप सहसंबंधित हो सकें)।
इसके विपरीत, एक विंडोज जीयूआई एप्लिकेशन आम तौर पर उपयोगकर्ता को रिपोर्ट करेगा (हालांकि वे विंडोज इवेंट लॉग में लॉग इन भी कर सकते हैं)।
ईवेंट में संबंधित प्रदर्शन काउंटर (उदाहरण के लिए त्रुटियां / सेकंड की संख्या) भी हो सकते हैं, और ईवेंट लॉग में किसी भी प्रत्यक्ष लेखन, प्रदर्शन काउंटर, ट्रेस सिस्टम को लिखना और उपयोगकर्ता को रिपोर्ट करना महत्वपूर्ण हो सकता है ताकि वे उस समय घटित हों उसी समय।
यानी यदि कोई उपयोगकर्ता किसी विशेष समय पर एक त्रुटि संदेश देखता है, तो आपको Windows इवेंट लॉग में समान त्रुटि संदेश खोजने में सक्षम होना चाहिए, और फिर ट्रेस लॉग में समान टाइमस्टैम्प के साथ एक ही घटना (अन्य ट्रेस विवरणों के साथ)।
(2) गतिविधियाँ - अनुप्रयोग लॉग फाइलें या डेटाबेस तालिका (और ट्रेस फाइलें)
यह एक नियमित गतिविधि है जो एक प्रणाली करती है, जैसे कि वेब पेज की सेवा, स्टॉक मार्केट ट्रेड दर्ज, ऑर्डर लिया, गणना प्रदर्शन, आदि।
गतिविधि अनुरेखण (प्रारंभ, रोक, आदि) यहां (सही दाने पर) उपयोगी है।
इसके अलावा, एक विशिष्ट एप्लिकेशन लॉग (जिसे कभी-कभी ऑडिट लॉग कहा जाता है) का उपयोग करना बहुत आम है। आमतौर पर यह एक डेटाबेस टेबल या एप्लिकेशन लॉग फ़ाइल होती है और इसमें संरचित डेटा (यानी फ़ील्ड का एक सेट) होता है।
आपके आवेदन के आधार पर यहां चीजें थोड़ी धुंधली हो सकती हैं। एक अच्छा उदाहरण एक वेब सर्वर हो सकता है जो वेब लॉग के प्रत्येक अनुरोध को लिखता है; इसी तरह के उदाहरण एक मैसेजिंग सिस्टम या गणना प्रणाली हो सकते हैं जहां प्रत्येक ऑपरेशन को एप्लिकेशन-विशिष्ट विवरण के साथ लॉग किया जाता है।
स्टॉक मार्केट ट्रेडों या बिक्री आदेश प्रणाली का इतना अच्छा उदाहरण नहीं है। इन प्रणालियों में आप शायद पहले से ही गतिविधि को लॉग कर रहे हैं क्योंकि उनके पास महत्वपूर्ण व्यावसायिक मूल्य है, हालांकि अन्य कार्यों के लिए उन्हें सहसंबंधित करने का प्रमुख अभी भी महत्वपूर्ण है।
कस्टम एप्लिकेशन लॉग के साथ-साथ, गतिविधियों में अक्सर संबंधित सुधार काउंटर भी होते हैं, जैसे प्रति सेकंड लेनदेन की संख्या।
आम तौर पर आपको विभिन्न प्रणालियों में लॉगिंग गतिविधियों का समन्वय करना चाहिए, यानी अपने आवेदन पत्र को उसी समय लिखें जब आप अपना प्रदर्शन काउंटर बढ़ाते हैं और अपने ट्रेस सिस्टम में लॉग इन करते हैं। यदि आप एक ही समय में सभी करते हैं (या कोड में एक दूसरे के बाद सीधे), तो डिबगिंग समस्याएं आसान होती हैं (जैसे कि वे सभी कोड में अलग-अलग समय / स्थानों पर होती हैं)।
(३) डिबग ट्रेस - टेक्स्ट फ़ाइल, या शायद XML या डेटाबेस।
यह वर्बोस लेवल और लोअर (जैसे कस्टम बूलियन स्विच ऑन / ऑफ कच्चे डेटा डंप) की जानकारी है। यह एक उप-गतिविधि स्तर पर एक प्रणाली क्या कर रही है इसका विवरण या विवरण प्रदान करता है।
यह वह स्तर है जिसे आप अपने एप्लिकेशन के व्यक्तिगत अनुभागों (इसलिए कई स्रोतों) के लिए चालू / बंद करने में सक्षम होना चाहते हैं। आप इस सामान को विंडोज इवेंट लॉग को अव्यवस्थित करना नहीं चाहते हैं। कभी-कभी एक डेटाबेस का उपयोग किया जाता है, लेकिन अधिक संभावना लॉग फ़ाइलों को रोल करना है जो एक निश्चित समय के बाद शुद्ध होते हैं।
इस जानकारी और एक अनुप्रयोग लॉग फ़ाइल के बीच एक बड़ा अंतर यह है कि यह असंरचित है। जब भी एक एप्लिकेशन लॉग में To, From, Amount आदि के लिए फ़ील्ड्स हो सकते हैं, Verbose डिबग ट्रैस वह हो सकता है जो कोई प्रोग्रामर डालता है, उदाहरण के लिए "मानों की जाँच X = {मान}, Y = गलत", या यादृच्छिक टिप्पणी / मार्कर जैसे " हो गया, फिर से कोशिश करना ”।
एक महत्वपूर्ण अभ्यास यह सुनिश्चित करने के लिए है कि आप एप्लिकेशन लॉग फ़ाइलों में रखी गई चीजें या विंडोज इवेंट लॉग भी समान विवरण (जैसे टाइमस्टैम्प) के साथ ट्रेस सिस्टम में लॉग इन करें। यह आपको तब जांच करने पर विभिन्न लॉग को सहसंबंधित करने की अनुमति देता है।
यदि आप एक विशेष लॉग दर्शक का उपयोग करने की योजना बना रहे हैं क्योंकि आपके पास जटिल सहसंबंध है, जैसे सेवा ट्रेस व्यूअर, तो आपको एक उपयुक्त प्रारूप अर्थात XML का उपयोग करने की आवश्यकता है। अन्यथा, एक साधारण पाठ फ़ाइल आमतौर पर काफी अच्छी होती है - निचले स्तरों पर जानकारी काफी हद तक असंरचित होती है, इसलिए आपको एरे, स्टंप डंप आदि के डंप मिल सकते हैं, बशर्ते आप उच्च स्तर पर अधिक संरचित लॉग में सहसंबद्ध हो सकते हैं, चीजें होनी चाहिए। ठीक रहो।
प्रश्न: यदि फ़ाइलों का उपयोग करते हैं, तो क्या आप रोलिंग लॉग या केवल एक फ़ाइल का उपयोग करते हैं? आप लोगों को उपभोग करने के लिए लॉग कैसे उपलब्ध कराते हैं?
एक: फ़ाइलों के लिए, आम तौर पर आप एक प्रबंधनीयता के दृष्टिकोण से लॉग फ़ाइलों को रोल करना चाहते हैं (System.Diagnostics के साथ बस VisualBasic.Logging.FileLogTraceListener का उपयोग करें)।
उपलब्धता फिर से सिस्टम पर निर्भर करती है। यदि आप केवल फ़ाइलों के बारे में बात कर रहे हैं, तो सर्वर / सेवा के लिए, रोलिंग फ़ाइलों को आवश्यक होने पर ही एक्सेस किया जा सकता है। (विंडोज इवेंट लॉग या डेटाबेस एप्लिकेशन लॉग का अपना एक्सेस मैकेनिज्म होगा)।
यदि आपके पास फ़ाइल सिस्टम तक आसान पहुँच नहीं है, तो डेटाबेस में डीबग करना आसान हो सकता है। [यानी एक डेटाबेस TraceListener लागू करें]।
एक विंडोज़ जीयूआई एप्लिकेशन के लिए मैंने देखा कि एक दिलचस्प समाधान यह था कि यह "उड़ान रिकॉर्डर" को चलाने के दौरान बहुत विस्तृत ट्रेसिंग जानकारी लॉग करता है और फिर जब आप इसे बंद कर देते हैं अगर इसमें कोई समस्या नहीं थी तो यह बस फ़ाइल को हटा देता है।
यदि, हालांकि यह दुर्घटनाग्रस्त हो गया या समस्या का सामना करना पड़ा, तो फ़ाइल को हटाया नहीं गया था। या तो यदि यह त्रुटि पकड़ता है, या अगली बार जब यह चलता है तो यह फ़ाइल को नोटिस करेगा, और फिर यह कार्रवाई कर सकता है, उदाहरण के लिए इसे संकुचित करें (उदाहरण 7zip) और इसे ईमेल करें या अन्यथा उपलब्ध कराएं।
कई सिस्टम इन दिनों एक केंद्रीय सर्वर में विफलताओं की स्वचालित रिपोर्टिंग शामिल करते हैं (उपयोगकर्ताओं के साथ जांच करने के बाद, उदाहरण के लिए गोपनीयता कारणों से)।
देखना
प्रश्न: लॉग देखने के लिए आप किन उपकरणों का उपयोग करते हैं?
A: यदि आपके पास विभिन्न कारणों से कई लॉग हैं तो आप कई दर्शकों का उपयोग करेंगे।
नोटपैड / vi / नोटपैड ++ या किसी अन्य पाठ संपादक सादे पाठ लॉग के लिए बुनियादी है।
यदि आपके पास जटिल ऑपरेशन हैं, जैसे कि स्थानान्तरण के साथ गतिविधियाँ, तो आप, जाहिर है, सर्विस ट्रेस व्यूअर जैसे विशेष उपकरण का उपयोग करेंगे। (लेकिन अगर आपको इसकी आवश्यकता नहीं है, तो एक पाठ संपादक आसान है)।
जैसा कि मैं आम तौर पर विंडोज इवेंट लॉग में उच्च स्तर की जानकारी लॉग करता हूं, तो यह एक संरचित तरीके से (अवलोकन करने के लिए एक त्वरित तरीका प्रदान करता है, सुंदर त्रुटि / चेतावनी आइकन देखें)। यदि लॉग में पर्याप्त नहीं है, तो आपको केवल पाठ फ़ाइलों के माध्यम से शिकार शुरू करने की आवश्यकता है, हालांकि कम से कम लॉग आपको एक प्रारंभिक बिंदु देता है। (इस बिंदु पर, सुनिश्चित करें कि आपके लॉग में समन्वित एंट्रेस उपयोगी हो गए हैं)।
आम तौर पर विंडोज इवेंट लॉग इन महत्वपूर्ण घटनाओं को मॉम या ओपन व्यू जैसे निगरानी उपकरणों के लिए भी उपलब्ध कराता है।
अन्य --
यदि आप एक डेटाबेस में प्रवेश करते हैं, तो यह आसान हो सकता है कि आप आसानी से फ़िल्टर करें और सूचना अनुपात (जैसे एक विशेष गतिविधि आईडी पर ज़ूम करें) के साथ (पाठ फ़ाइलों के साथ आप ग्रेप / पॉवरशेल का उपयोग कर सकते हैं या इच्छित इच्छित GUID पर फ़िल्टर के समान)।
एमएस एक्सेल (या अन्य स्प्रेडशीट प्रोग्राम)। यह संरचित या अर्ध-संरचित जानकारी का विश्लेषण करने के लिए उपयोगी हो सकता है यदि आप इसे सही सीमांकक के साथ आयात कर सकते हैं ताकि विभिन्न मान अलग-अलग कॉलम में जाएं।
डिबग / टेस्ट में एक सेवा चलाते समय मैं आमतौर पर इसे सादगी के लिए एक कंसोल एप्लिकेशन में होस्ट करता हूं मुझे एक रंगीन कंसोल लॉगर उपयोगी लगता है (जैसे त्रुटियों के लिए लाल, चेतावनियों के लिए पीला, आदि)। आपको एक कस्टम ट्रेस श्रोता को लागू करने की आवश्यकता है।
ध्यान दें कि रूपरेखा में रंगीन कंसोल लॉगर या डेटाबेस लकड़हारा शामिल नहीं है, इसलिए अभी, आपको ये लिखने की आवश्यकता होगी यदि आपको उनकी आवश्यकता है (यह बहुत कठिन नहीं है)।
यह वास्तव में मुझे गुस्सा दिलाता है कि कई चौखटे (log4net, EntLib, आदि) ने पहिया को फिर से आविष्कार करने और बुनियादी लॉगिंग, फ़िल्टरिंग और पाठ फ़ाइलों में लॉगिंग, विंडोज इवेंट लॉग, और एक्सएमएल फाइलें, प्रत्येक में अपना समय बर्बाद किया है। अलग तरीके (लॉग स्टेटमेंट प्रत्येक में अलग हैं); प्रत्येक ने तब अपने स्वयं के संस्करण को लागू किया है, उदाहरण के लिए, एक डेटाबेस लकड़हारा, जब उनमें से अधिकांश पहले से ही मौजूद थे और सभी की जरूरत थी जो System.Diagnostics के लिए कुछ और ट्रेस श्रोता थे। नकल के प्रयास की एक बड़ी बर्बादी के बारे में बात करें।
प्रश्न: यदि आप ASP.NET समाधान का निर्माण कर रहे हैं, तो क्या आप ASP.NET स्वास्थ्य निगरानी का भी उपयोग करते हैं? क्या आप स्वास्थ्य मॉनिटर घटनाओं में ट्रेस आउटपुट शामिल करते हैं? Trace.axd के बारे में क्या?
इन चीजों को आवश्यकतानुसार चालू / बंद किया जा सकता है। मुझे लगता है कि एक सर्वर कुछ चीजों के प्रति प्रतिक्रिया करता है, लेकिन डिबगिंग के लिए ट्रेस.एक्सडी काफी उपयोगी है, लेकिन यह आमतौर पर इस्तेमाल किए जाने वाले वातावरण में या लंबे समय तक ट्रेसिंग के लिए उपयोगी नहीं है।
प्रश्न: कस्टम प्रदर्शन काउंटर के बारे में क्या?
एक पेशेवर अनुप्रयोग के लिए, विशेष रूप से एक सर्वर / सेवा, मैं इसे पूरी तरह से प्रदर्शन मॉनीटर काउंटर और विंडोज विंडोज लॉग में लॉगिंग दोनों के साथ देखने की उम्मीद करता हूं। ये विंडोज में मानक उपकरण हैं और इनका उपयोग किया जाना चाहिए।
आपको यह सुनिश्चित करने की आवश्यकता है कि आप प्रदर्शन काउंटर और ईवेंट लॉग के लिए इंस्टॉलर को शामिल करते हैं जो आप उपयोग करते हैं; इन्हें स्थापना के समय (व्यवस्थापक के रूप में स्थापित करते समय) बनाया जाना चाहिए। जब आपका एप्लिकेशन सामान्य रूप से चल रहा होता है, तो उसे प्रशासन के विशेषाधिकारों की आवश्यकता नहीं होनी चाहिए (और इसलिए लापता लॉग बनाने में सक्षम नहीं होगा)।
यह गैर-प्रशासक के रूप में विकसित होने का अभ्यास करने का एक अच्छा कारण है (जब आपको सेवाओं आदि को स्थापित करने की आवश्यकता हो तो एक अलग व्यवस्थापक खाता हो)। यदि ईवेंट लॉग में लिख रहा है, तो .NET आपके द्वारा पहली बार लिखने पर एक गुम लॉग बना देगा; यदि आप एक गैर-व्यवस्थापक के रूप में विकसित होते हैं, तो आप इसे जल्दी पकड़ लेंगे और जब ग्राहक आपके सिस्टम को स्थापित करता है, तो इसे आश्चर्यचकित न करें और फिर इसका उपयोग नहीं कर सकते क्योंकि वे व्यवस्थापक के रूप में नहीं चल रहे हैं।