2009-05-15 21 views
11

Bu bir OOP konsept sorusu olabilir, ancak burada yapmak istediklerim var.System.Diagnostics.Trace.WriteLine'ı bir dosyada geçersiz kılmak için

DebugView ile görüntülenebilir, böylece System.Diagnostics.Trace.WriteLine kullanarak hata ayıklama bilgilerini çıkaran bir uygulama var.

Metni bir dosyaya veya belki de İz çıktısına ek olarak kaydetmek için bu yöntemi geçersiz kılmak/genişletmek (uygun terminolojiden emin değil) istiyorum. Bu benim uygulamam için yeni bir WriteLine yöntemi yazmamı sağlar ve tüm diğer System.Diagnostics.Trace.WriteLine ifadelerini uygulamanın geri kalanında değişmeden bırakabilirim.

VB.Net uygulamasında bu yöntemin davranışını değiştirmeye nasıl başlarım?

+1

Son çözüm? 2 cevap var, kabul edilmiyor ... – Kiquenet

cevap

26

Hala Trace'i kullanmaya kararlı mısın? Değilse, Log4Net gibi daha özellikli bir kayıt sistemi kullanırdım. Ancak, 'u kullanmak istiyorsanız, app.config dosyayla kullanılan TraceListener s'yi yeniden yapılandırabilirsiniz. TraceListener MSDN docs böyle biraz örnek vermek:

<configuration> 
    <system.diagnostics> 
    <trace autoflush="false" indentsize="4"> 
     <listeners> 
     <add name="fileLogger" 
      type="System.Diagnostics.TextWriterTraceListener" 
      initializeData="LogFile.log" /> 
     <remove name="Default" /> 
     </listeners> 
    </trace> 
    </system.diagnostics> 
</configuration> 

TextWriterTraceListener verilen dosyaya günlükleri dökümü. (. Kullanılabilecek diğer seçenekler de vardır)

Alternatif olarak, programlı bunu yapabilirsiniz:

Trace.Flush(); 
: Ya birlikte, açıkça uygulama çıkmadan önce izlerini temizlemek gerekebilir

Trace.Listeners.Add(new TextWriterTraceListener("foo.log")); 

Not

veya daha karmaşık:

foreach (TraceListener listener in Trace.Listeners) 
{ 
    listener.Flush(); 
} 

(çünkü sadece söz Bunu test ederken vardı)

EDIT:! Açıklamalarda belirtildiği gibi, dinleyici (her yazma sonra temizlenmesi için sen mutluysan hangi sonunda temizlemek zorunda önler, ancak performansına zarar verebilir) Trace.AutoFlush değerini true olarak ayarlayabilirsiniz (XML'de dahil olmak üzere - autoflush özniteliğine bakın).

+0

Dinleyiciler + yineleme yineleme yinelenen statik yöntem Trace.Flush() çağırmak değil mi? Ayrıca, istemci uygulamasının dinleyicilerin doğru şekilde nasıl yerleştirildiğini nasıl sağlayabileceğini biliyor musunuz? –

+0

Trace.Flush hakkında haklı olabilirsiniz - emin değilim. Dinleyicilerin bertaraf edilmesine gelince, dinleyicilerin verilerinin yazılması için imha edilmelerine gerek yoktur. –

+0

Yup, Trace.Flush gerekli işi yapıyor. Cevabı uygun şekilde düzenledi. –

İlgili konular