मेरे पास एक TraceSource ऑब्जेक्ट है जिसका उपयोग मैं VB.Net एप्लिकेशन के प्रारंभ को लॉग करने के लिए करता हूं। मानक के बिना वह यह है कि, -.Net: TraceSource हेडर को दबाने के लिए कैसे करें ("SourceName TraceEventType: Id:")?
- ConsoleTraceListener
- TextWriterTraceListener
- EventLogTraceListener
पहले दो मैं प्रविष्टि उत्पादन "कच्चे" होना चाहता हूँ के लिए: यह कई TraceListeners संलग्न है शीर्षलेख:
SourceName TraceEventType: Id :
मैं एक आवरण है कि यह करता है जब TraceEventType वर्बोस के लिए निर्धारित है को लागू किया है:
If _buffer.EventType = TraceEventType.Verbose Then
For Each listener As TraceListener In _traceSource.Listeners
listener.Write(_buffer.Text)
Next
Else
_traceSource.TraceEvent(_buffer.EventType, id, _buffer.Text)
End If
मैं सभी ट्रेसिंग के लिए ऐसा कर सकता है, लेकिन फिर इवेंटलॉग में सभी प्रविष्टियों के साथ स्तर = सूचना सूचीबद्ध किया जाएगा। तो मैं ट्रेस संदेश की गंभीरता को निर्दिष्ट करने में सक्षम होना चाहता हूं, लेकिन मुझे ट्रेससोर्स या ट्रेस लिस्टेनर्स पर कोई विधि नहीं मिल रही है जो मुझे ऐसा करने की अनुमति देती है। (
- लिखें()
- WriteLine()
- TraceData()
- TraceEvent()
- TraceTransfer) : जहाँ तक मैं बता सकता हूँ, TraceListener इसे करने के लिए लिखने के लिए इन विकल्पों में है
अंतिम 3 TraceEventType प्रदान करने की अनुमति देता है (जो इवेंटलॉग प्रविष्टियों को सही ढंग से लेबल करता है, लेकिन परिणामी आउटपुट कंसोल और लॉग फ़ाइल में शामिल है, फिर इसमें शामिल है उपसर्गों और (उदाहरण के लिए) इस तरह समाप्त होता है:
Bootstrapper Warning: 0 : Failed to validate assembly
वहाँ ओवरराइड करने के लिए कैसे ConsoleTraceListener और TextWriterTraceListener प्रारूप अपने उत्पादन में एक ही समय में टैग करने के लिए सक्षम किया जा रहा है, इस शीर्ष लेख शामिल नहीं करने के लिए एक रास्ता है TraceEventType के साथ प्रविष्टियां (EventLog के लिए)?
यह सबसे अच्छा मैं अब तक के साथ आए हैं है:
For Each listener As TraceListener In _traceSource.Listeners
If listener.GetType Is GetType(ConsoleTraceListener) OrElse listener.GetType Is GetType(TextWriterTraceListener) Then
listener.Write(_buffer.Text)
Else
listener.TraceEvent(Nothing, _traceSource.Name, _buffer.EventType, id, _buffer.Text)
End If
Next
यह काम करने के लिए लगता है, लेकिन Microsoft से TraceListener.TraceEvent Method पर दस्तावेज में, यह कहते हैं:
Important: This method is not intended to be called directly by application code but by members of the Debug, Trace, and TraceSource classes to write trace data to output.
..तो मुझे यकीन नहीं है कि यह करने के लिए एक अच्छी बात है?
संपादित करें:
मैं सिर्फ महसूस किया कि अगर मैं यहाँ मेरा आखिरी उदाहरण की तरह कुछ करना है, मैं TraceSource बिल्कुल, क्योंकि यह वैसे भी नजरअंदाज किया जा रहा है की जरूरत नहीं है। लेकिन इसका मतलब यह भी है कि मुझे अपनी खुद की फ़िल्टरिंग और स्विचिंग तंत्र को लागू करना है (लेकिन यह संभव है कि मैं जिस तरह से काम करना चाहता हूं उसे पाने के लिए भुगतान करने के लिए एक उचित कीमत हो)।
धन्यवाद, मुझे एक नजर आएगी (हालांकि मैं किसी कारण से बाहरी एडॉन्स का उपयोग नहीं करना चाहता)। और अब मैंने अपनी खुद की ट्रेसिंग प्रणाली भी बनाई है जहां मैं समान चीजें कर सकता हूं। मेरी कक्षा ट्रेससोर्स के समान ही काम करती है, लेकिन इसमें दो श्रोता संग्रह हैं।एक जो TraceEvent() का उपयोग कर मानक तरीके से कार्य करता है, और दूसरा "कच्चा" लिखें() फ़ंक्शन का उपयोग करता है। प्रत्येक लॉग संदेश को सभी श्रेणियों (कुछ झंडे इत्यादि के आधार पर) में सभी श्रोताओं को धक्का दिया जाता है, ताकि आप श्रोताओं को जोड़ सकें जिनके लिए इवेंट टाइप टैगिंग की आवश्यकता होती है, और दूसरे में सादा/कस्टम स्वरूपण वाले लोग। अच्छा काम करता है। – d7samurai
मुझे लगता है कि पुस्तकालय वास्तव में अच्छा है, इसलिए आगे बढ़ें और इसे आज़माएं, आपको यह पसंद आएगा। एक तरीका यह आपके वर्कफ़्लो की मदद कर सकता है कि आप TraceListener वर्गों के एक ही सेट का उपयोग कर सकते हैं, लेकिन वास्तव में कॉन्फ़िगरेशन के माध्यम से जो लिखा जाता है उसे बदलें। तो, आपके पास कुछ श्रोताओं (कंसोल और टेक्स्टवाइटर) से जुड़े "कच्चे" प्रारूप और दूसरों के साथ जुड़े "ईवेंट" प्रारूप (EventLog) हो सकते हैं। यदि आप अगले सप्ताह या अगले महीने तय करते हैं कि आप किसी भी प्रारूप से कुछ जानकारी जोड़ना या निकालना चाहते हैं, तो आपको केवल app.config में प्रारूप बदलना होगा। कोई कोड नहीं बदलता है। सौभाग्य! – wageoghe
d7samurai, क्या आप NotInventedHere-Antipattern से परिचित हैं? –