2010-02-08 10 views
12

.NET आपको कोड में ट्रेस स्टेटमेंट जोड़ने देता है। आपश्रेणी के माध्यम से कैसे पता लगाएं?

Trace.WriteLine "(कुछ संदेश") का उपयोग कर सकते हैं;

और फिर उन संदेशों को लॉग फ़ाइल में एकत्र करने के लिए ट्रेस श्रोता को परिभाषित करें। ठीक है तो अब तक।

लेकिन क्या आप भी कर सकते हैं:

Trace.WriteLine "(कुछ संदेश", "श्रेणी");

आप app.config (यानी .exe.config) में एक फ़िल्टर कैसे सेट अप कर सकते हैं ताकि "श्रेणी" के किसी निश्चित मान वाले संदेशों को श्रोता को भेजा जा सके। दस्तावेज संकेत देता है कि आप ऐसा कर सकते हैं लेकिन आपको यह बताने से कम हो जाता है कि, मुझे लगता है! मैं अपनी खुद की श्रेणियों (उपप्रणाली द्वारा) परिभाषित करना चाहता हूं और आवश्यकता होने पर विभिन्न लॉग फ़ाइलों को ट्रेस करने में सक्षम हूं।

(हाँ मैं लॉग 4नेट के बारे में सब कुछ जानता हूं और यह मेरी सभी समस्याओं को कैसे हल कर सकता है)।

निक

+0

यदि आप किसी समाधान के बारे में जानते हैं, तो इसका उपयोग क्यों न करें? क्या आप वास्तव में एक पहिया को फिर से शुरू करना चाहते हैं? –

+6

ढांचे के अंतर्निर्मित तंत्र का उपयोग करने के लिए यह एक दिलचस्प अभ्यास है और अतिरिक्त घटकों को भेजने की आवश्यकता को हटा देता है। –

उत्तर

2

आप श्रेणी स्ट्रिंग द्वारा निशान फिल्टर करने के लिए TraceFilter के एक कार्यान्वयन कोड करने के लिए की आवश्यकता होगी। अन्यथा, आप TraceEvent विधि का उपयोग कर सकते हैं और फिर TraceEventType के आधार पर निशान फ़िल्टर करने के लिए EventTypeFilter का उपयोग कर सकते हैं।

फ़िल्टर संशोधित करने के लिए, आप EventTypeFilter के उदाहरण में वर्णित app.config फ़ाइल का उपयोग करें।

+0

TraceFilter एक सार वर्ग है इसलिए एक त्रुटि देता है। SourceFilter स्वीकार किया जाता है लेकिन मैं नहीं देख सकता कि मेरी श्रेणी को कैसे रखा जाए और इसे कैसे काम करें। –

+0

बनाकर, मेरा मतलब है कि अपना खुद का व्युत्पन्न निर्दिष्ट करें। मैं तदनुसार संपादित करूंगा। –

+1

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

0

TraceEvent के संदर्भ में जेफ के उत्तर के बाद, मैंने सफलतापूर्वक ग्रैनुलर फ़िल्टरिंग सेट करने के लिए ट्रेससोर्स का सफलतापूर्वक उपयोग किया है। ट्रेस केवल वही कर सकता है जो आप पूछते हैं कि क्या आप कस्टम फ़िल्टर लिखते हैं, आदि, लेकिन ट्रेससोर्स आपको बॉक्स के बाहर बहुत कुछ प्रदान करने की पेशकश कर सकता है। http://bit.ly/dXgHa7 पर माइक की पोस्ट ने मुझे स्पष्ट रूप से फ़िल्टर करने के लिए ट्रेससोर्स के साथ सभी कामों को स्विच, श्रोताओं और फ़िल्टरों के बारे में स्पष्टता दी।

0

बस यहां एक चीज़ स्पष्ट करने के लिए।

इस तरह एक लाइन काम नहीं करेगा:

Trace.Listeners["listener2"].Filter = new CategoryFilter("FooFilter", new List<string>(), CategoryFilterMode.DenyAllExceptAllowed); 

क्योंकि आप एक TraceFilter करने के लिए एक CategoryFilter नहीं सौंप सकते। असंगतता टाइप करें। यहां इरादा (ओपी में) ऐसा करने की कोशिश करने जैसा लगता है। - जो, जब आप app.config को देखते हैं, संभवतः ऐसा करने योग्य लगता है, लेकिन प्रोग्रामेटिक कोडिंग करते समय टाइप असंगतता अधिक स्पष्ट होती है।

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

संबंधित मुद्दे