5

En mi app.config quiero establecer 3 niveles de seguimiento (¿interruptores?): Detallado, advertencia y ninguno. En la versión de depuración del código, quiero que el conmutador detallado esté activo, en la versión Quiero advertencia. En casos especiales, los usuarios de mi aplicación pueden modificar el archivo de configuración para deshabilitar todos los rastros.no puede entender .net 2010 tracing y app.config

Quiero que las huellas de depuración salgan en la consola, mientras que las versiones de liberación solo se guardan en un archivo de registro.

I', he escrito lo siguiente:

[...] 
<system.diagnostics> 
     <sources> 
      <!-- This section defines the logging configuration for My.Application.Log --> 
      <source name="debug" switchName="debug"> 
      <listeners> 
       <add name="FileLog"/> 
       <add name="console"/> 
      </listeners> 
      </source> 

      <source name="release" switchName="release"> 
      <listeners> 
       <add name="FileLog"/> 
      </listeners> 
      </source> 

      <source name="silent" switchName="none"> 
      <listeners/> 
      </source> 
     </sources> 


     <switches> 
      <add name="debug" value="Verbose"/> 
      <add name="release" value="Warning"/> 
      <add name="none" value="Off"/> 
     </switches> 


     <!--<sharedListeners> 
      <add name="FileLog" type="System.Diagnostics.TextWriterTraceListener" traceOutputOptions="DateTime" initializeData="felix.log"/> 
      <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false" /> 
     </sharedListeners>--> 

     <trace autoflush="false" indentsize="4"> 
      <listeners> 
       <add name="FileLog" type="System.Diagnostics.TextWriterTraceListener" traceOutputOptions="DateTime" initializeData="felix.log"/> 
       <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false"/> 
       <remove name="Default"/> 
      </listeners> 
     </trace> 

    </system.diagnostics> 
[...] 

Luego, en código que llaman rastro de esta manera:

Public Shared Sub HandleException(ByVal ex As Exception) 
    Trace.WriteLine(ex.Message, "Error") 

[...]

Hay algo que me falta Creo. ¿Cómo le digo al método Trace el interruptor correcto para usar? ¿Cómo pueden los usuarios de mi aplicación cambiar el archivo de configuración para permitir el rastreo o deshabilitarlo?

Gracias.

Respuesta

7

Parece que está mezclando el concepto de registro/seguimiento a través de Trace.Write y Trace.WriteLine con el registro/seguimiento utilizando objetos TraceSource.

Los objetos TraceSource le permiten tener "objetos de registro" controlables individualmente (a través de conmutadores), de modo que puede activar el inicio de sesión de parte de su código y desactivarlo para otras partes de su código. La salida de los objetos de TraceSource se puede configurar para ir a diferentes TraceListeners (o al mismo TraceListener). Trace.WriteLine no es realmente muy flexible. Se puede configurar con un solo nivel (es decir, globalmente puede iniciar sesión en Debug o Info o lo que sea), mientras que con TraceSources, un TraceSource podría iniciar sesión en Debug y otro podría iniciar sesión en Info mientras que otro podría estar completamente desactivado.

Consulte mis respuestas en estos enlaces para ver ejemplos de cómo configurar TraceSources y cómo usarlos en el código.

How to use TraceSource across classes

Turning tracing off via app.config

What's the best approach to logging?

Add Trace methods to System.Diagnostics.TraceListener

cuanto a cómo quiere que su/rastreo de registro para trabajar en depuración vs versión, puede tener dos archivos app.config diferentes. Ambos definirían el mismo TraceSources (es decir, el mismo conjunto de objetos de seguimiento/registro "nombrados"). En la aplicación.config que se usará con las compilaciones de depuración, puede establecer el nivel de seguimiento/registro en un valor Depurar/Información/Lo que sea y puede dirigir la salida a la Consola y/o un Archivo y/o lo que sea. En el app.config que se utilizará con las compilaciones de depuración, puede establecer el nivel de seguimiento/registro en un valor diferente (o Desactivado) y dirigir el resultado a un Archivo.

En las dos publicaciones anteriores, incluyo varios otros enlaces a información sobre System.Diagnostics, incluido el proyecto Ukadc.Diagnostics. Este proyecto proporciona una capacidad de formateo muy interesante para utilizar con TraceListeners basados ​​en System.Diagnostics (siempre que los oyentes provengan de Ukadc.Diagnostics) sin cambios en sus instrucciones de seguimiento/registro reales. La capacidad de formateo es similar a la proporcionada por log4net y NLog.

Lea la información que he vinculado anteriormente y vea si ayuda.Intenta usar TraceSources en lugar de solo Trace.WriteLine. Cuando te sientas cómodo con eso, tal vez veas Ukadc.Diagnostics.

+0

Muchas gracias, lo he leído todo, has arrojado algo de luz en mi oscuridad de registro :) Sugiero que escribas un artículo/publicación en un blog/página web, lo que sea para concentrar toda esta información que de otro modo se difundiría . Si lo haces, entonces ¡envíame el enlace! Gracias de nuevo. – vulkanino

+0

Finalmente lo descubrí, pero aún no puedo obtener el uso de la identificación para pasar al método TraceEvent. Si el origen de rastreo me permite configurar dónde (oyentes) y cuánto (interruptores) registrar, y luego especifico programáticamente el tipo de evento (TraceEventType), ¿de qué sirve tener que especificar un Id también? – vulkanino

+1

Para obtener una idea sobre los identificadores de eventos, consulte la primera respuesta a esta pregunta: http://stackoverflow.com/questions/576185/logging-best-practices Consulte "Otras recomendaciones". Siguiendo esa sugerencia, puede categorizar cada mensaje de registro (independientemente de TraceSource, TraceEventType o el mensaje). Sería relativamente fácil consultar/buscar su salida para ciertos tipos de mensajes. Por ejemplo, si el Id. De evento 1001 significa "leer desde un archivo" y 1002 significa "escribir en un archivo", puede encontrar todos los mensajes de registro en su salida que correspondan a la lectura o escritura de un archivo. – wageoghe

Cuestiones relacionadas