5

मेरे ऐप.कॉन्फिग में मैं 3 ट्रेसिंग स्तर (स्विच?) सेट करना चाहता हूं: वर्बोज़, चेतावनी और कोई नहीं। कोड के डीबग संस्करण में, मैं वर्बोज़ स्विच सक्रिय होना चाहता हूं, रिलीज में मुझे चेतावनी चाहिए। विशेष मामलों में मेरे एप्लिकेशन उपयोगकर्ता सभी निशान अक्षम करने के लिए कॉन्फ़िगरेशन फ़ाइल को संशोधित कर सकते हैं।समझ नहीं सकता .net 2010 ट्रेसिंग और app.config

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

मैं, लिखा ve निम्नलिखित:

[...] 
<system.diagnostics> 
     <sources> 
      <!-- This section defines the logging configuration for My.Application.Log --> 
      <source name="debug" switchName="debug"> 
      <listeners> 
       <add name="FileLog"/> 
       <add name="console"/> 
      </listeners> 
      </source> 

      <source name="release" switchName="release"> 
      <listeners> 
       <add name="FileLog"/> 
      </listeners> 
      </source> 

      <source name="silent" switchName="none"> 
      <listeners/> 
      </source> 
     </sources> 


     <switches> 
      <add name="debug" value="Verbose"/> 
      <add name="release" value="Warning"/> 
      <add name="none" value="Off"/> 
     </switches> 


     <!--<sharedListeners> 
      <add name="FileLog" type="System.Diagnostics.TextWriterTraceListener" traceOutputOptions="DateTime" initializeData="felix.log"/> 
      <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false" /> 
     </sharedListeners>--> 

     <trace autoflush="false" indentsize="4"> 
      <listeners> 
       <add name="FileLog" type="System.Diagnostics.TextWriterTraceListener" traceOutputOptions="DateTime" initializeData="felix.log"/> 
       <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false"/> 
       <remove name="Default"/> 
      </listeners> 
     </trace> 

    </system.diagnostics> 
[...] 

तब कोड में मैं ट्रेस इस तरह कहते हैं:

Public Shared Sub HandleException(ByVal ex As Exception) 
    Trace.WriteLine(ex.Message, "Error") 

[...]

वहाँ कुछ मैं याद कर रहा हूँ है मुझे लगता है। मैं ट्रेस विधि को सही स्विच का उपयोग करने के लिए कैसे कहूं ?? मेरे एप्लिकेशन उपयोगकर्ता कॉन्फ़िगरेशन फ़ाइल को कैसे ट्रेसिंग या अक्षम करने की अनुमति देने के लिए बदल सकते हैं?

धन्यवाद।

उत्तर

7

आप Trace.Write और Trace.WriteLine के माध्यम से लॉगिंग/ट्रेसिंग की अवधारणा को मिश्रित कर रहे हैं TraceSource ऑब्जेक्ट्स का उपयोग करके लॉगिंग/ट्रेसिंग के साथ।

TraceSource ऑब्जेक्ट्स आपको व्यक्तिगत रूप से नियंत्रित (स्विचिंग के माध्यम से) "ऑब्जेक्ट लॉगिंग" करने की अनुमति देता है जैसे कि आप अपने कुछ कोड के लिए लॉगिंग चालू कर सकते हैं और अपने कोड के अन्य हिस्सों के लिए बंद कर सकते हैं। TraceSource ऑब्जेक्ट्स से आउटपुट को अलग-अलग TraceListeners (या उसी TraceListener) पर जाने के लिए कॉन्फ़िगर किया जा सकता है। Trace.WriteLine वास्तव में बहुत लचीला नहीं है। इसे केवल एक स्तर के साथ कॉन्फ़िगर किया जा सकता है (यानी वैश्विक स्तर पर आप डीबग या जानकारी या जो कुछ भी लॉग कर सकते हैं), जबकि ट्रेस स्रोतों के साथ, एक ट्रेससोर्स डीबग पर लॉगिंग कर सकता है और दूसरा कोई जानकारी पर लॉग इन कर सकता है जबकि दूसरा एक पूरी तरह से बंद हो सकता है।

TraceSources को कॉन्फ़िगर करने और कोड में उनका उपयोग करने के तरीके के कुछ उदाहरणों के लिए इन लिंक में मेरे उत्तरों देखें।

How to use TraceSource across classes

Turning tracing off via app.config

What's the best approach to logging?

Add Trace methods to System.Diagnostics.TraceListener

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

उपर्युक्त दोनों पदों में मैं सिस्टम पर जानकारी के कई अन्य लिंक शामिल करता हूं। डायग्नोस्टिक्स, Ukadc.Diagnostics प्रोजेक्ट सहित। यह प्रोजेक्ट सिस्टम के साथ उपयोग के लिए एक बहुत ही रोचक स्वरूपण क्षमता प्रदान करता है। डायग्नोस्टिक्स आधारित ट्रेस लिस्टेनर्स (श्रोताओं को Ukadc.Diagnostics से आते हैं) आपके वास्तविक ट्रेसिंग/लॉगिंग स्टेटमेंट में कोई बदलाव नहीं है। स्वरूपण क्षमता लॉग 4नेट और एनएलओजी द्वारा प्रदान की गई समान है।

मैंने जो जानकारी दी है उसे पढ़ें और देखें कि क्या यह मदद करता है।Trace.WriteLine की बजाय TraceSources का उपयोग करने का प्रयास करें। जब आप इसके साथ सहज महसूस करते हैं, तो शायद Ukadc.Diagnostics में देखें।

+0

बहुत बहुत धन्यवाद, मैंने सब कुछ पढ़ा है, आपने मेरे लॉगिंग अंधेरे में एक प्रकाश डाला है :) मैं सुझाव दूंगा कि आप एक लेख/ब्लॉग पोस्ट/वेब पेज लिखें, जो भी इस जानकारी को ध्यान में रखे जो अन्यथा फैल जाएगा । यदि आप करते हैं, तो मुझे लिंक भेजें! एक बार फिर धन्यवाद। – vulkanino

+0

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

+1

इवेंट आईडी के बारे में एक विचार के लिए, इस प्रश्न का पहला उत्तर देखें: http://stackoverflow.com/questions/576185/logging-best-practices "अन्य अनुशंसाओं" के अंतर्गत देखें। उस सुझाव के बाद, आप प्रत्येक लॉग संदेश को वर्गीकृत कर सकते हैं (ट्रेससोर्स, ट्रेसेवेन्ट टाइप या संदेश के बावजूद)। फिर कुछ प्रकार के संदेश के लिए आपके आउटपुट को क्वेरी/खोजना अपेक्षाकृत आसान होगा। उदाहरण के लिए, यदि ईवेंट आईडी 1001 का अर्थ है "फ़ाइल से पढ़ना" और 1002 का मतलब है "फ़ाइल में लिखना", तो आप अपने आउटपुट में सभी लॉग संदेश ढूंढ सकते हैं जो फ़ाइल से पढ़ने या लिखने के अनुरूप होते हैं। – wageoghe

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