2012-02-07 13 views
5

मैं सिस्टम का उपयोग कर रहा हूं। डायग्नोस्टिक्स। लॉगिंग के लिए्रेससोर्स और मेरे श्रोताओं में से एक टेक्स्टवाइटर ट्रेस लिस्टर है। अनुरेखण प्राइमर here में यह इस सेट इस प्रकार है:आप app.config का उपयोग करके एक टेक्स्टवाइटरट्रेस लिस्टनर को जोड़ने से कैसे रोकते हैं?

<listeners> 
    <add initializeData="output.txt" 
     type="System.Diagnostics.TextWriterTraceListener" 
     name="myLocalListener" /> 
</listeners> 

समस्या यह है कि यह हमेशा output.txt को संलग्न नहीं है। कॉन्फ़िगरेशन फ़ाइल में ओवरराइट करने के लिए आप इसे कैसे बदलते हैं?

new TextWriterTraceListener(new StreamWriter("output.txt", false)); 

उत्तर

2

सबसे आसान समाधान स्वयं को बनाना है।

मेरा सुझाव है कि आप TextWriterTraceListener से उत्तराधिकारी हैं और आपके कन्स्ट्रक्टर में आपके द्वारा प्रस्तावित किए गए आधार पर Writer आधार सेट करें: new StreamWriter("output.txt", false)

कुछ नमूना कोड:

public class MyTextWriterTraceListener : TextWriterTraceListener 
{ 
    public MyTextWriterTraceListener(string logFileName) 
     : base(logFileName) 
    { 
     base.Writer = new StreamWriter(logFileName, false); 
    } 
} 

यह आपको फ़ाइल का नाम निर्दिष्ट, या यदि कोड में बनाए गए एक निर्दिष्ट करने के लिए एक विन्यास फाइल से initializeData पैरामीटर ले सकते हैं।

+0

मुझे विचार पसंद है, लेकिन App.config 'type = MyNamespace.MyTextWriterTraceListener' में टाइप निर्दिष्ट करते समय प्रोग्राम क्रैश हो जाता है। –

+0

दिलचस्प। मैंने दूसरे दिन एक समान कस्टम श्रोता बनाया और इसमें कोई समस्या नहीं थी। एक बिट जो मुझे अपने app.config में जोड़ना था, 'टाइप = "MyNamespace.MyTextWriterTraceListener, AssemblyNameContainingListener" 'था। यह भी सुनिश्चित करें कि इसमें शामिल असेंबली की प्रतिलिपि बनाई जा रही है, मेरे पास एक यूनिट परीक्षण था जो इसे app.config में संदर्भित करता था लेकिन कोड में नहीं, इसलिए विजुअल स्टूडियो स्थानीय की प्रतिलिपि बनाने के लिए पर्याप्त सहायक नहीं था। –

+0

धन्यवाद, मैं असेंबली नाम छोड़ रहा था। –

1

मैं जानता हूँ कि यह सीधे अपने सवाल का जवाब नहीं है, लेकिन इसके बजाय NLog का उपयोग करें:

प्रोग्राम श्रोता मैं चाहता हूँ एक है। यह लॉगिंग विकल्पों के संदर्भ में आउट ऑफ़ द बॉक्स डायग्नोस्टिक्स से अधिक सामान करता है और इसका उपयोग करना वास्तव में आसान है।

+3

-1 प्रश्न का उत्तर नहीं देता है। ओपी वैकल्पिक लॉगिंग समाधान के लिए नहीं पूछ रहा था बल्कि एक चुने गए को कॉन्फ़िगर कैसे करें। –

+1

@ जोन पीटरसन मैं असहमत हूं। एक उचित मौका है कि यह उत्तर कहीं किसी के लिए सहायक होगा। – Holf

0

इससे भी अधिक सरल है, बस TestWriterTraceListener बता फ़ाइल नहीं जोड़ी जा रहे हैं:

TextWriterTraceListener twtl = new TextWriterTraceListener(new StreamWriter(@"<path to my logfile>", false)); 

false का चयन लॉगफ़ाइल हर बार जब आप TextWriterTraceListener प्रारंभ ओवरराइट है के द्वारा।

+0

धन्यवाद, लेकिन मैं ऐसे समाधान की तलाश में था जो कॉन्फ़िगर में लेखक के विनिर्देश की अनुमति देगा। आपका समाधान प्रश्न के निचले हिस्से में है क्योंकि व्यवहार मैं दोहराना चाहता हूं :) –

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