2009-05-15 13 views
11

Esto puede ser más una pregunta sobre el concepto OOP, pero esto es lo que me gustaría hacer.Anulando System.Diagnostics.Trace.WriteLine para iniciar sesión en un archivo

Tengo una aplicación que genera información de depuración usando System.Diagnostics.Trace.WriteLine para que se pueda ver con DebugView.

Me gustaría sobrescribir/extender (no estoy seguro de la terminología adecuada) este método para registrar el texto en un archivo en su lugar, o tal vez además de la salida de seguimiento. Esto me permitiría escribir un nuevo método WriteLine para mi aplicación, y podría dejar todas mis otras declaraciones System.Diagnostics.Trace.WriteLine sin cambios en el resto de la aplicación.

Entonces, ¿cómo podría cambiar el comportamiento de este método dentro de mi aplicación VB.Net?

+1

¿alguna solución final? hay 2 respuestas, no aceptadas ... – Kiquenet

Respuesta

26

¿Está absolutamente convencido de seguir usando Trace? Si no, usaría un sistema de registro más completo como Log4Net.

Sin embargo, si realmente desea utilizar Trace, puede reconfigurar el TraceListener s utilizado con un archivo app.config. El TraceListener MSDN docs dar un ejemplo algo como esto:

<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 se volcar los registros en el fichero dado. (. Hay otras opciones disponibles también)

Alternativamente, se puede hacer esto mediante programación:

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

Tenga en cuenta que puede que tenga que eliminar de forma explícita las huellas antes de que sus salidas de aplicaciones, ya sea con:

Trace.Flush(); 

o el más complicado:

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

(Sólo lo menciono porque Tenía que al probar esto)

EDITAR: Como se señaló en los comentarios, si eres feliz para el oyente que se limpie después de cada escritura (lo que evita tener que limpiar al final, pero puede perjudicar el rendimiento) puede establecer Trace.AutoFlush en verdadero (incluido en XML - vea el atributo autoflush).

+0

¿No es la iteración sobre los oyentes + Flush equivalente a llamar al método estático Trace.Flush()? Además, ¿sabe cómo la aplicación del cliente puede garantizar que los oyentes estén debidamente eliminados? –

+0

Es posible que tenga razón acerca de Trace.Flush: no estoy seguro. En cuanto a la eliminación de los oyentes, espero que los oyentes no necesiten ser eliminados para escribir sus datos. –

+0

Sí, Trace.Flush hace el negocio requerido. Respuesta editada apropiadamente –

3

Hay un TextWriterTraceListener que puede configurar para generar el registro de seguimiento en un archivo. La información de configuración se puede encontrar en el MSDN aquí:

http://msdn.microsoft.com/en-us/library/system.diagnostics.textwritertracelistener(VS.80).aspx

También puede volcar el registro de eventos o una variedad de otros lugares para obtener una lista de construido en escucha de seguimiento se puede mirar aquí:

http://msdn.microsoft.com/en-us/library/4y5y10s7(VS.80).aspx

Cuestiones relacionadas