2012-02-07 10 views
5

Estoy usando System.Diagnostics.TraceSource para el registro y uno de mis oyentes es un TextWriterTraceListener. En el trazado de imprimación here que diferencia a este de la siguiente manera:¿Cómo se detiene la adición de un TextWriterTraceListener usando app.config?

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

El problema es que esto siempre va a anexar a Output.txt. ¿Cómo se altera esto a una sobreescritura en el archivo de configuración?

mediante programación al oyente lo que quiero es un:

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

Respuesta

2

La solución más simple es hacer la tuya.

que sugieren que se hereda de TextWriterTraceListener y en su constructor establecer la base Writer a lo que usted propuso: new StreamWriter("output.txt", false).

un código de ejemplo:

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

Esto le permite tomar el parámetro initializeData de un archivo de configuración para especificar el nombre del archivo o especifique uno si creado en el código.

+0

Me gusta la idea, pero al especificar el tipo en App.config 'type = MyNamespace.MyTextWriterTraceListener' el programa se bloquea. –

+0

Interesante. Hice un oyente personalizado similar el otro día y no tuve problemas. El único bit que tuve que agregar a mi app.config fue 'type =" MyNamespace.MyTextWriterTraceListener, AssemblyNameContainingListener "'. Además, asegúrese de que se está copiando el ensamblaje que lo contiene, tuve una prueba de unidad que hacía referencia a él en la aplicación.config pero no en el código, por lo que Visual Studio fue lo suficientemente útil como para no copiarlo localmente. –

+0

Gracias, estaba dejando el nombre del ensamblado. –

1

Sé que esto no responde directamente a su pregunta, pero el uso de NLog lugar. Hace más cosas que los diagnósticos listos para usar en términos de opciones de registro y es realmente fácil de usar.

+3

-1 no responde la pregunta en absoluto. OP no estaba pidiendo soluciones de registro alternativas, sino más bien cómo configurar el elegido. –

+1

@JonPeterson No estoy de acuerdo. Hay una posibilidad razonable de que esta respuesta sea útil para alguien, en algún lugar. – Holf

0

Aún más sencillo, simplemente digo la TestWriterTraceListener a no anexar el archivo:

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

Al seleccionar false el archivo de registro se sobrescribe cada vez que usted hace el TextWriterTraceListener.

+0

Gracias, pero estaba buscando una solución que permitiera la especificación del escritor en la configuración. Su solución está en la parte inferior de la pregunta como el comportamiento que me gustaría replicar :) –

Cuestiones relacionadas