Cuando se produce una excepción en tiempo de ejecución, podemos querer capturar todas las excepciones existentes para meterlas en un fichero de log que mas tarde revisariamos.
Porque decimos capturar todas las excepciones y no la excepcion a secas? Porque en .NET las excepciones pueden provenir de una excepción anterior, una especie de jerarquía, de forma que la propiedad InnerException contendrá una referencia a la excepción originadora, y esta a su vez puede tener otra InnerException y así sucesivamente, aunque no es lo normal.
De tal forma que puede resultar muy útil capturar todas las excepciones para tener mayor detalle del problema, y para tal fin proponemos usar un método extensor o método de extensión, que nos permiten «añadir» métodos a los tipos existentes
Método extensor para Capturar todas las excepciones en C#.
El siguiente método será recursivo e irá almacenando las diferentes excepciones en una variable string, que al final será la que recibamos en la llamada.
El método es una extensión del objeto Exception, por tanto para utilizarlo, hay que invocarlo desde tales objetos, es decir, este tipo de métodos no se llaman por su nombre como cualquier otro método estático.
Notese que un método de extensión se declara porque el parámetro que recibe es el objeto del que extenderá y el cual debe llevar la palabra reservada «this«.
public static string AllMessages(this Exception ex) { if (ex == null) return string.Empty; string msgs = ex.Message; if (ex.InnerException != null) msgs += Environment.NewLine + "InnerException: " + AllMessages(ex.InnerException); return msgs; }
Para utilizarlo, imaginemos que en cualquier parte de otro código, tenemos un tratamiento de excepciones, pues en el Catch podriamos hacer algo como esto:
catch (Exception ex) { Console.WriteLine("Excepcion: " + ex.AllMessages()); }
Y gracias al método extensor para capturar todas las excepciones, obtendriamos una cadena con el mensaje descriptivo de las mismas.
2899 visitas.
Hola! Muy util tu articulo, al principio mencionabas que seria muy util generar un log con todas las excepsiones, eso mismo me gustaria realizar, como logro crear un log(.txt) e introducirle todas las excepsiones?
Saludos