2012-06-27 4 views
10

में ट्रेस कैसे काम करता है यह समझने की कोशिश कर रहा हूं कि ट्रेसिंग कैसे काम करता हैसी #

मैंने एक साधारण नई वेब प्रोजेक्ट बनाई है। यह मेरा कोड है कि मैं का उपयोग कर सकते है

// Create a trace listener for the event log. 
EventLogTraceListener myTraceListener = new EventLogTraceListener("myEventLogSource"); 

// Add the event log trace listener to the collection. 
Trace.Listeners.Add(myTraceListener); 

// Write output to the event log. 
Trace.WriteLine("Test output"); 

मैं से इस msdn link

सेटिंग्स मदद ले रहा हूँ में मेरे web.config जब मैं इस कोड को चलाने के रूप में

<system.diagnostics> 
<trace autoflush="false" indentsize="4"> 
    <listeners> 
    <add name="myListener" 
     type="System.Diagnostics.EventLogTraceListener" 
     initializeData="TraceListenerLog" /> 
    </listeners> 
</trace> 
</system.diagnostics> 

इस प्रकार है हालांकि है, मुझे नहीं पता कि यह लॉगिंग कहां हो रहा है, मैं "एप्लिकेशन और सर्विसेज लॉग" के तहत ईवेंट विज़ुअल की जांच करता हूं, मुझे "myEventLogSource" नाम से कुछ नया लॉग बनाने की उम्मीद थी, लेकिन ऐसा नहीं हुआ है।

कृपया कोई मुझे बता सकता है कि यह कैसे काम करता है।

+0

क्या आप हमें बता सकते हैं कि जब आप 'autoflush' को' true' में बदलते हैं तो कॉन्फ़िगरेशन में क्या होता है? या 'ट्रेस' वर्ग की 'ऑटोफ्लश' संपत्ति। वैकल्पिक रूप से, लिखने के बाद 'फ्लश' पर कॉल करें। साथ ही, एक्सएमएल कॉन्फ़िगरेशन आपको श्रोताओं को कोड में बनाने/कॉन्फ़िगर करने की आवश्यकता से बचाता है। –

+0

नए इवेंट लॉग स्रोतों को बनाने के लिए व्यवस्थापक अधिकारों की आवश्यकता होती है। इस कमांड को एडमिन कमांड प्रॉम्प्ट में पहले चलाएं 'इवेंटक्रेट/आईडी 1/एल आवेदन/टी सूचना/SO myEventLogSource/D "MyEventLogSource बनाया" ' – adrianm

उत्तर

7

एप्लिकेशन लॉग के तहत जांच करें कि क्या आपके पास दो स्रोत हैं जो एप्लिकेशन लॉग पर लिख रहे थे, एक TraceListenerLog है और दूसरा मेरा IventLogSource है। नया लॉग नहीं बनाया जा रहा है, वे दोनों एप्लिकेशन लॉग का उपयोग करेंगे। आप एक नया लॉग बनाना चाहते हैं और आप इसे करने के लिए उत्पादन का पता लगाने लिखना चाहते हैं, तो आप इसे इस तरह से कर सकते हैं (जाहिर है, लोग इन नाम स्रोत नाम के बराबर होना नहीं है):

 string logSource = "_myEventLogSource"; 
     if (!EventLog.SourceExists(logSource)) 
      EventLog.CreateEventSource(logSource, logSource); 

     EventLogTraceListener myTraceListener = new EventLogTraceListener(logSource); 

     // Add the event log trace listener to the collection. 
     System.Diagnostics.Trace.Listeners.Add(myTraceListener); 

     // Write output to the event log. 
     System.Diagnostics.Trace.WriteLine("Test output"); 

यहां तक ​​कि यदि स्रोत मौजूद नहीं होगा, तो ट्रेस जानकारी इवेंट लॉग के तहत इवेंट लॉग में इवेंट लॉग के साथ लिखे गए स्रोत नाम के साथ लिखी जाएगी, जिसे आपने EventLogTraceListener कन्स्ट्रक्टर को पास कर दिया है।

+0

मैं इसे आज़माउंगा, लेकिन यदि ईवेंट स्रोत मौजूद नहीं है तो कोड (प्रश्न में) एक त्रुटि फेंक? – Yasser

+0

यह जांचने जा रहा है कि स्रोत मौजूद है (EventLog.SourceExists (logName)), यदि यह अस्तित्व में नहीं है तो यह बनाया जाएगा (EventLog.CreateEventSource (logName, logName))। इसे आज़माएं, अगर आपके पास कोई वेब एप्लिकेशन है तो आप इस कोड को डाल सकते हैं, मान लें, पेज_लोड इवेंट हैंडलर। मौजूदा लॉग की ताज़ा सूची प्राप्त करने के लिए इस खुले ईवेंट व्यूअर को एक और बार चलाने के बाद। –

+1

भले ही स्रोत मौजूद न हो, भले ही सूचना लॉग के तहत इवेंट लॉग में इवेंट लॉग के लिए इवेंट लॉग पर लिखा जाए, जिसे आपने EventLogTraceListener कन्स्ट्रक्टर को पास किया है। –