2009-10-21 15 views
5

मैं अपने एप्लिकेशन को MachineName_UserName_yyyymmdd_hhmmss.txt जैसे विभिन्न ट्रेस फ़ाइलों को लिखना चाहता हूं, जहां उपयोगकर्ता नाम वर्तमान में लॉग इन उपयोगकर्ता है और समय एप्लिकेशन का प्रारंभ समय है। .Net श्रोता TextWriterTraceListener केवल कॉन्फ़िगरेशन फ़ाइल में निर्दिष्ट हार्ड कोडित फ़ाइल नाम का समर्थन करता प्रतीत होता है। कस्टम ट्रेस श्रोता लिखने के बिना ऐसा करने का कोई तरीका है।.Net कस्टम ट्रेस फ़ाइल का नाम

मान लिया जाये कि मैं एक कस्टम ट्रेस श्रोता लिखने के लिए है, मैं इस तरह एक tracelistener को लागू किया है:

Imports System.Diagnostics 

Public Class MyCustomTraceListener 
    Inherits TextWriterTraceListener 

    Public Sub New() 
     'Need to do it this way as the Base constructor call has to be the first statement 
     MyBase.New(String.Format("AppNameTraceFile_{0}_{1}_{2}{3}{4}-{5}{6}{7}.txt", _ 
                 Environment.MachineName, _ 
                 Environment.UserName, _ 
                 DateTime.Now.ToString("yyyy"), _ 
                 DateTime.Now.ToString("MM"), _ 
                 DateTime.Now.ToString("dd"), _ 
                 DateTime.Now.ToString("HH"), _ 
                 DateTime.Now.ToString("mm"), _ 
                 DateTime.Now.ToString("ss"))) 
     Me.IndentSize = 4 
    End Sub 

End Class 

कॉन्फ़िग फ़ाइल में, मैं इस तरह स्रोत का पता लगाने कॉन्फ़िगर किया है:

<system.diagnostics> 
    <trace autoflush="true"/> 
    <sources> 
     <source name="MyTraceSource" 
       switchName="mySwitch" 
       switchType="System.Diagnostics.SourceSwitch" > 
     <listeners> 
      <clear/> 
      <add name="MyTraceListener" 
      type="MyNameSpace.MyCustomTraceListener" 
      traceOutputOptions="ProcessId, DateTime, Callstack" /> 
     </listeners> 
     </source> 
    </sources> 
    <switches> 
     <add name="mySwitch" value="Warning" /> 
    </switches> 
    </system.diagnostics> 

मैं इस तरह का ट्रेस स्रोत बना रहा हूं:

Dim tsTraceSource As TraceSource = New TraceSource("MyTraceSource") 
tsTraceSource.TraceEvent(TraceEventType.Warning, 0, "warning message") 

हालांकि, स्टार्टअप पर, मैं मिल रहा हूं एक त्रुटि है कि "MyNameSpace.MycustomTraceListener" प्रकार नहीं मिला।

क्या कोई यह देखता है कि समस्या क्या है?

धन्यवाद।

उत्तर

1

क्या आपको अपनी टाइप असेंबली को सूचित करने की आवश्यकता नहीं है?

<add name="MyTraceListener" 
    type="MyNameSpace.MyCustomTraceListener, MyAssembly" 
    traceOutputOptions="ProcessId, DateTime, Callstack" /> 
+0

यह काम करता है। धन्यवाद। – DevByDefault

0

एक और दृष्टिकोण है जो एक व्युत्पन्न वर्ग पूरी तरह से के लिए जरूरत से बचा जाता है:

अपने config एक्सएमएल में एक आधार वर्ग TextWriterTraceListener बनाएँ, और उसके बाद स्टार्टअप पर, आप श्रोताओं संग्रह करके बताना यह पता लगाने के लिए कर सकते हैं (वहाँ होगा आमतौर पर एक डिफ़ॉल्ट ट्रेस लिस्टर और एक टेक्स्टवाइटरट्रेस लिस्टनर बनें), फिर बस अपनी लॉगिंग स्ट्रीम को एक नई स्ट्रीम में सेट करें।

+0

यह दृष्टिकोण भी काम करता है। धन्यवाद। – DevByDefault

0

कोड में अपना TraceListener सेट अप करने के बारे में क्या? यदि आप अभी भी कुछ पैरामीटर चाहते हैं, उदा। लॉग पथ, app.config में होने के लिए, उन्हें ऐप सेटिंग्स अनुभाग में परिभाषित करें और जब आप अपना श्रोता बनाते हैं तो उन्हें पढ़ें।

' VB 
Dim traceLog As New FileStream(traceFile, FileMode.OpenOrCreate) 
Dim traceListener As New TextWriterTraceListener(traceLog) 
Trace.Listeners.Add(traceListener) 

// C# 
FileStream traceLog = new FileStream(traceFile, FileMode.OpenOrCreate); 
TextWriterTraceListener traceListener = new TextWriterTraceListener(traceLog); 
Trace.Listeners.Add(traceListener); 

कॉन्फ़िगरेशन में प्रत्येक तत्व एपीआई से मेल खाता है, इसलिए आप जो भी चाहते हैं उसे करने में सक्षम होंगे।

traceListener.TraceOutputOptions |= TraceOptions.Callstack | TraceOptions.DateTime | TraceOptions.ProcessId; 
+0

हां यह काम करेगा, लेकिन मैं कॉन्फ़िगरेशन फ़ाइल के माध्यम से कॉन्फ़िगरेशन फ़ाइल के माध्यम से प्रदान की गई सभी कॉन्फ़िगरेशन क्षमताओं के साथ एक ही सेटिंग्स की नकल करने के लिए ऐपसेटिंग को बेक कर दूंगा और फिर उन्हें प्रोग्रामिक रूप से सेट करूँगा।कॉन्फ़िगर फ़ाइल निश्चित रूप से इसे करने का 'मानक' तरीका है। लेकिन, मैं सहमत हूं कि यह एक व्यावहारिक विकल्प है। धन्यवाद। – DevByDefault

0

लिटिल पुराने पोस्ट लेकिन सिर्फ मामले में किसी को आता है भर में - यहाँ एक कड़ी है जो कैसे दिनांक और समय के साथ एक रोलिंग फ्लैट फ़ाइल का पता लगाने श्रोता स्थापित करने के लिए विवरण है: http://msdn.microsoft.com/en-us/library/ff664768%28v=pandp.50%29.aspx

आवेदन ब्लॉक लॉगिंग के बारे में जनक लेख आवेदन ब्लॉक

लॉगिंग - है http://msdn.microsoft.com/en-us/library/ff664569%28v=pandp.50%29.aspx

पर आप जोड़ने के लिए एक दृश्य स्टूडियो मेंउद्यम लाइब्रेरी नामक पैकेज nuget हो सकता है

यदि आप एंटरप्राइज़ लाइब्रेरी के लॉगिंग एप्लिकेशन ब्लॉक में गहरी गोता लगाने के लिए चाहते हैं, तो यहां पर पूरी पीडीएफ पुस्तक है: http://www.microsoft.com/en-us/download/details.aspx?id=41145

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