2010-03-09 11 views
9

¿Cómo registro la excepción interna con Log4NET?Logging InnerException usando Log4Net

Ésta es mi patrón de conversión actual:

<conversionPattern value="%date [%appdomain] %-5level %logger [%property{NDC}] - %message%newline" /> 
+1

Sólo una nota: http://logging.apache.org/log4net/release/sdk/log4net.NDC.html está en desuso NDC . He utilizado con éxito 'log4net.ThreadContext.Properties [" propertyName "]' en su lugar. Su patrón de conversión sería algo así como '% property {propertyName}' referencia: http: //logging.apache.org/log4net/release/sdk/log4net.NDC.html – ram

Respuesta

7

Consola y archivos appenders imprimen automáticamente la excepción. La excepción: el mensaje, el seguimiento de la pila y todas las excepciones internas (de nuevo con el seguimiento de pila) se registran en líneas separadas y no siguen el patrón de conversión.

Ni siquiera estoy seguro de si podría configurar log4net para que no se imprima.

Actualización: Es posible configurar el appender para no imprimir el StackTrace: Log4Net - Logging out the Exception stacktrace only for certain files

+0

Hola Stefan, ¿me puede indicar un tema relevante? entrada en SDK confirmando lo que respondió? – Raj

+0

No lo leí en ninguna parte. Esto es lo que veo en mis archivos de registro o en la consola cuando uso log4net. Las excepciones internas siempre están impresas. –

+1

No sé por qué, pero veo en mi archivo de registro algo completamente opuesto: la excepción interna no se registra en absoluto. – VikciaR

1

Después de algunas google rápida, me encontré con alguien que tenía a similar problem. La solución de Freddy Gómez fue:

Se puede implementar un procesador (una clase que implementa la interfaz IObjectRenderer) para su excepción y poner la información que desee sobre la excepción. Luego, solo tiene que agregar un elemento al archivo de configuración.

+0

Las otras soluciones en el mismo hilo al que hice referencia incluyeron el análisis de la excepción y la inclusión de información adicional en el mensaje.

9

% excepción

una forma formateada del objeto excepción en la entrada de registro, si la entrada contiene una excepción; de lo contrario, esta expresión de formato no añade nada a la entrada del registro

Referencia: http://www.beefycode.com/post/Log4Net-Tutorial-pt-4-Layouts-and-Patterns.aspx

Creo que su excepción contendría la excepción interna:

Editar: utilizar el ILog.Error (método) en lugar de ILog.ErrorFormat(). Según documentation, ErrorFormat() no toma un objeto Exception para incluir en el evento de registro

+0

+1 por mencionar que ErrorFormat no toma una excepción. Eso es lo que necesitaba. –

-1

Solo pude verificar esto en el código fuente para Log4Net versión 2.0 y puedo ver que no hay consideración para el registro de InnerException. Esa es la limitación actual de Log4Net (versión 2) que no admite la prestación de InnerException de fábrica. Es por eso que usted comenzar a usar Nlog como lo ha orden interna de soporte para la representación InnerException - link