2011-01-31 10 views
8

Estoy tratando de entender la diferencia entre Trace.Write vs Trace.TraceInformation y cuál se debe utilizar.Cómo incluir la marca de tiempo fácil de usar en las huellas

Intenté configurar traceOutputOptions para timestamp/datetime. Solo necesito agregar una marca de tiempo con cada mensaje que estoy escribiendo. La fecha que estoy recibiendo es un poco desordenada ya que agrega un nombre de aplicación y una marca de tiempo menos amigable para el usuario en la siguiente línea, como se muestra a continuación.

ConsoleApplication1.exe Information: 0 : Hello - Trace! 
DateTime=2011-01-31T14:26:11.1538509Z 
ConsoleApplication1.exe Error: 0 : Hello - Trace! 
DateTime=2011-01-31T14:26:11.1538509Z 

Todo lo que necesito es algo así como

2011-01-31 11:32 Information: Hello - Trace! 
2011-01-31 11:33 Error: Hello - Trace! 

¿Hay alguna forma fácil de su puesta en marcha en App.config hacerlo?

+0

'Trace.Write' y su tipo son la" forma antigua "de rastrear (utilizando OutputDebugString). La "nueva forma" es con Fuentes de rastreo: http://msdn.microsoft.com/en-us/library/ms228989.aspx – Tergiver

Respuesta

1

Eche un vistazo al proyecto Ukadc.Diagnostics en codeplex. Proporciona un buen paquete de complementos basado en System.Diagnostics que proporciona una capacidad de formateo de salida más potente (similar a log4net y NLog) que la que se puede lograr con System.Diagnostics TraceListeners incorporado. Incluso puede escribir sus propios objetos de formato/token y tenerlos incluidos en el proceso de formato de salida.

La biblioteca es fácil de usar y funciona bastante bien.

+0

Gracias por el enlace. Simplemente parece un poco "pesado" incluir una dependencia externa por eso, algo simple. Esperaba obtener algo dentro del rastreo para lograr eso. Se verá en este proyecto en codeplex de todos modos. – imak

+0

@imak - Los TraceListeners incorporados no tienen opciones de formato muy flexibles. Otra opción para usted sería escribir su propio TraceListener e implementar el formato como lo desee. – wageoghe

10

he encontrado un mejor enfoque, sin la necesidad de cualquier otra dependencia externa (creo que las características incluidas System.Diagnostics ya son ricos)

he heredado los dos oyentes que necesitaba (ConsoleTraceListener y TextWriterTraceListener) de esta manera:

namespace MyApp 
{ 
    namespace Diagnostics 
    { 
     public class DateTimeConsoleTraceListener : ConsoleTraceListener 
     { 
      public override void Write(string message) 
      { 
       base.Write(DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss.fffffff ") + message); 
      } 
     } 

     public class DateTimeTextWriterTraceListener : TextWriterTraceListener 
     { 
      public DateTimeTextWriterTraceListener(string fileName) : base(fileName) { } 

      public override void Write(string message) 
      { 
       base.Write(DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss.fffffff ") + message); 
      } 
     } 
    } 
} 

Luego, en App.config:

<sharedListeners> 
    <add name="ConsoleListener" 
    type="MyApp.Diagnostics.DateTimeConsoleTraceListener, MyApp"> 
    <filter type="System.Diagnostics.EventTypeFilter" 
     initializeData="All"/> 
    </add> 
    <add name="FileListener" 
    type="MyApp.Diagnostics.DateTimeTextWriterTraceListener, MyApp" 
    initializeData="MyApp.log" > 
    <filter type="System.Diagnostics.EventTypeFilter" 
     initializeData="All"/> 
    </add> 
</sharedListeners> 

Espero que esto ayude!

+0

Enfriar, el método 'Write null WriteLine (string message)' también debe ser anulado, de lo contrario, algunas de las líneas de rastreo serán sin una marca de tiempo. – igorushi

+0

Si comprueba el código desensamblado de ConsoleTraceListener y TextWriterTraceListener (por ejemplo, con Reflector) verá que usan internamente la clase StreamWriter que en el método WriteLine simplemente agrega los caracteres NewLine y llama al método Write. Por lo tanto, si anula tanto Write como WriteLine obtendrá una marca de tiempo duplicada cada vez que se llame a WriteLine. – Jamby

Cuestiones relacionadas