@ La respuesta de Jon es la mejor solución cuando se desea obtener todos los detalles (todos los mensajes y el seguimiento de la pila) y la recomendada.
Sin embargo, puede haber casos en los que sólo quieren los mensajes internos, y para estos casos utilizo el siguiente método de extensión:
public static class ExceptionExtensions
{
public static string GetFullMessage(this Exception ex)
{
return ex.InnerException == null
? ex.Message
: ex.Message + " --> " + ex.InnerException.GetFullMessage();
}
}
a menudo utilizar este método cuando tenga diferentes oyentes de seguimiento y registro y quiero tener diferentes puntos de vista sobre ellos. De esta forma puedo tener un oyente que envía el error completo con seguimiento de pila por correo electrónico al equipo de desarrollo para la depuración usando el método .ToString()
y uno que escribe un archivo de inicio de sesión con el historial de todos los errores que ocurrieron cada día sin el seguimiento de la pila con el método .GetFullMessage()
.
¿Por qué necesita mostrar la excepción interna? –
@Akram porque la mayoría de las veces es la excepción interna lo que es interesante. Un ejemplo es el XmlSerializer que lanza una InvalidOperationException cada vez que algo sale mal. Lo que salió mal está en la excepción interna. – adrianm
@AkramShahda Bueno, ¿tal vez quiera utilizar este método en su registro? – cederlof