2011-01-14 8 views
5

ट्रेस। लिस्टेनर्स और डीबग। लिस्टेनर्स एक ही आंतरिक संग्रह साझा कर रहे हैं, इस प्रकार मैं ट्रेस। लिस्टेनर्स और डीबग श्रोता को डीबग के लिए एक ट्रेस श्रोता नहीं जोड़ सकता। लिस्टेनर्स उनके बीच अंतर करने के लिए।कस्टम ट्रेस श्रोता में ट्रेस और डीबग कॉल के बीच अंतर कैसे करें?

मैं इसे कैसे प्राप्त कर सकता हूं?

संपादित करें: क्योंकि मैं हमारे आवेदन करने के लिए एक प्रवेश परत wrting रहा हूँ

क्यों मैं ऐसा करना चाहते हैं बस है और मैं प्रणाली है जहाँ डीबग/ट्रेस की दो स्रोतों है बाहर विभिन्न लॉग के ट्रैक के माध्यम से रखना चाहते हैं लॉग (कुछ अन्य स्रोत भी हैं) मैं ट्रैक रखना चाहता हूं।

+0

आप क्या करने की कोशिश कर रहे हैं? क्या आप कुछ कोड दिखा सकते हैं जिसे आप लिखना चाहते हैं और शायद आप परिणाम क्या चाहते हैं? आप जो भी सोच रहे हैं उसके मुकाबले आप जो करने की कोशिश कर रहे हैं उसे पूरा करने का एक अलग तरीका हो सकता है। – wageoghe

+0

यह बहुत आसान है, मैं अपने कस्टम श्रोताओं को सबकुछ लॉग करना चाहता हूं। एक में डीबग-कॉल और एक में ट्रेस-कॉल। – Marcus

उत्तर

4

[संपादित करें]

मैं प्रश्न के शीर्षक में हिस्सा याद है जहाँ आप एक कस्टम ट्रेस श्रोता के संदर्भ में यह उल्लेख। तो, जाहिर है कि आपने एक कस्टम ट्रेस लिस्टनर लिखा है (या लिखना चाहता हूं) जो Trace.WriteLine और Debug.WriteLine के बीच अंतर कर सकता है। मुझे लगता है कि जो कुछ भी मैं नीचे कहता हूं वह अभी भी सत्य है, जहां तक ​​TraceSources Trace.WriteLine और Debug.WriteLine के लिए बेहतर है। हालांकि, मेरा जवाब जरूरी नहीं है कि आप अपने प्रश्न का उत्तर दें, यह कहने के अलावा कि मुझे नहीं लगता कि यह ट्रेस लिस्टनर के लिखित और लिखितलाइन विधियों के भीतर से यह बताने के लिए संभव है कि उन्हें आखिरकार ट्रेस के कॉल के कारण बुलाया गया था। राइटलाइन बनाम डीबग ।पंक्ति लिखो।

यह स्पष्ट नहीं है कि आप क्या हासिल करने की कोशिश कर रहे हैं, भले ही आप कस्टम ट्रेस लिस्टनर के भीतर से लिखने या लिखने के लिए कॉल के अंतिम स्रोत के भीतर से बता सकें। जो कुछ भी आप पूरा करना चाहते हैं, मुझे विश्वास करना होगा कि यदि आप TraceSources पर अपने कोड में अपने लॉगिंग स्टेटमेंट्स के साथ शुरुआत करना चाहते हैं तो यह करना आसान होगा।

क्या आप अपने मूल प्रश्न में कुछ कोड जोड़ सकते हैं जो दिखाता है कि आप कुछ एप्लिकेशन कोड कैसे लिख सकते हैं, Trace.WriteLine और Debug.WriteLine पर कुछ कॉल जोड़ सकते हैं। साथ ही, अपने कस्टम ट्रेस लिस्टनर से कुछ कोड दिखाएं जो दिखाता है कि आप कौन सी कार्रवाई करना चाहते हैं यदि आप Trace.WriteLine और Debug.WriteLine के बीच अंतर कर सकते हैं। कुछ की तरह:

public void WriteLine(string msg) 
{ 
    if (WasWrittenFromTrace) 
    { 
    //Before writing to output, add "TRACE" to front of message 
    WriteToOutput("TRACE: {0}", msg); 
    } 
    else 
    if (WasWrittenFromDebug) 
    { 
    //Before writing to output, add "DEBUG" to front of message 
    WriteToOutput("DEBUG: {0}", msg); 
    } 
} 

[अंत संपादित करें]

देखें this answer मैं System.Diagnostics उपयोग के बारे में एक सवाल के जवाब में हाल ही में पोस्ट।

वहाँ बहुत सारी जानकारी है और सिस्टम के उपयोग के बारे में उस उत्तर में लिंक में बहुत सारी जानकारी है। डायग्नोस्टिक्स, Trace.WriteLine और Debug.WriteLine के बजाय TraceSources का उपयोग करने पर जोर देने के साथ।

अपने प्रश्न है, उससे लगता है जैसे आप इस तरह की कुछ कोड लिखने के लिए चाहते हो सकता है:

public void MyFunction(int x, int y) 
{ 
    Trace.WriteLine("Entering MyFunction. x = {0}, y = {1}", x, y); 

    int product = x * y; 

    Debug.WriteLine("product = {0}", product); 

    Trace.WriteLine("Exiting MyFunction"); 
} 

और आप जाहिरा तौर पर ट्रेस उत्पादन की तरह एक और TraceListener पर जाने के लिए एक TraceListener और डीबग उत्पादन के लिए जाना होगा । या ट्रेस लिस्टनर के भीतर (हो सकता है कि आप स्वयं को लिख लें) आप यह बताने में सक्षम होना चाहेंगे कि क्या दिया गया लिखें/लिखेंलाइन वास्तव में एक ट्रेस है। राइट या डीबग। राइट। मुझे नहीं लगता कि यह वास्तव में संभव है।

क्या आप अन्य तरीकों से ट्रेस और डीबग आउटपुट को भी नियंत्रित करना चाहते हैं (शायद एक को चालू करें और एक बंद करें?

आप TraceSources का प्रयोग करेंगे, तो आप आसानी से अपने ट्रेसिंग/प्रवेश के स्तर को नियंत्रित करने और आप कर सकते थे सकता है अगर आप ऐसा एक TraceListener करने के लिए कुछ TraceSources के उत्पादन और एक अलग करने के लिए दूसरों के उत्पादन में भेजना चाहते हैं TraceListener (और कुछ TraceSources भी कई TraceListeners को लिख सकते हैं)।

public class MyClass 
{ 
    //Static variable, so all instances of MyClass will have access to the same instance 
    //of the TraceSource 
    private static readonly TraceSource ts = new TraceSource("MyClass"); 

    public void MyMethod(int x, int y) 
    { 
    ts.TraceEvent(TraceEventType.Information, 0, "Entering MyMethod. x = {0}, y = {1}", x, y); 

    int product = x * y; 

    ts.TraceEvent(TraceEventType.Debug, 0, "Product = {0}", product); 

    ts.TraceEvent(TraceEventType.Information, 0, "Exiting MyMethod."); 
    } 
} 

क्या इस उदाहरण में TraceSource के लाभ हैं:

तो, TraceSources का उपयोग कर, आप इस तरह कोड लिख सकते हैं?

  1. अपने app.config आप चालू या बंद "MyClass" TraceSource देते हैं या एक निश्चित स्तर तक सेट कर सकते हैं में

    । यदि आप इसे "डीबग" पर सेट करते हैं, तो डीबग और सूचना संदेश लिखे जाएंगे। यदि आप इसे "सूचना" पर सेट करते हैं, तो केवल सूचना संदेश लॉग किए जाएंगे। यदि आप "सूचना" से अधिक सेट करते हैं, तो उदाहरण में कोई भी संदेश लॉग नहीं होगा।

  2. अपने ऐप.कॉन्फिग में आप "MyClass" का आउटपुट एक या अधिक TraceListeners को भेज सकते हैं। यदि आपके पास अधिक TraceSources ("YourClass", "HisClass") था, तो प्रत्येक एक ही TraceListener पर जा सकता था या प्रत्येक अपने ट्रेस लिस्टनर या बीच के किसी भी संयोजन में जा सकता था।

  3. अपने app.config में आप switching और/या filtering ऐसी है कि "MyClass", पर जाने के लिए उदाहरण के लिए नामित किया गया है, दो TraceListeners सेट कर सकते हैं। एक TraceListener इस तरह फ़िल्टर कर सकता है कि केवल "डीबग" संदेश लॉग हैं और दूसरा फ़िल्टर कर सकता है कि केवल "सूचना" संदेश लॉग हैं।

ट्रैस स्रोतों के साथ आप बहुत कुछ कर सकते हैं। उपरोक्त लिंक और उस पोस्ट के भीतर लिंक पढ़ें। Ukadc.Diagnostics प्रोजेक्ट देखें जो मैं पोस्ट में संदर्भित करता हूं। Essential.Diagnostics एक और प्रोजेक्ट है जो System.Diagnostics को एक्सटेंशन प्रदान करता है और साथ ही System.Diagnostics का उपयोग करने के कुछ अच्छे उदाहरण दिखाता है। Here is a good example from MSDN about using TraceSources, filters, and TraceListeners

मेरी राय में, यदि आप ट्रेस के बजाय ट्रेस स्रोतों का उपयोग करने का प्रयास करते हैं तो आप बेहतर होंगे। * और डीबग। * अपने कोड में ट्रेसिंग/लॉगिंग जोड़ने के लिए।

शुभकामनाएं!

+0

एक बहुत ही पूर्ण उत्तर के लिए धन्यवाद। TraceSources एक बेहतर तरीका है। – Marcus

+0

यह उत्तर 800 शब्दों को छोटा होना चाहिए (आपने 813 शब्दों को लिखा है, लगभग एक छोटा निबंध - WinWord में चिपकाए जाने पर 3 पृष्ठ) - बहुत अधिक जानकारी और पर्याप्त स्पष्ट नहीं है। – Marek

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