Con esta clase que os dejo, ExceptionManager, podréis controlar esos errores y guardarlos en base de datos, para revisarlos más tarde o enviarlos por mail.
Es una clase simple y fácilmente ampliable y mejorable.
ExceptionManager
No voy a explicar el funcionamiento de la clase, para eso tenéis el código fuente y os lo miráis, lo que voy a explicar es como utilizarla e incorporarla en vuestras aplicaciones.
La clase se compone de tres métodos públicos:
public static void PublisherLogSql(Exception ex, string method, string comment, string query, bool mail) public static void PublisherCustomLog(string log, bool mail) public static void WriteFileLog(Exception Ex, string method, string comment, string query, string fichero, bool mail)
Y una tabla que se puede incluir en cualquier base de datos _EXCEPTIONLOGSHay que añadir cuatro entradas en el web config de la aplicación:
<add key="notifyError" value="asolano@dominio.com"/>
<add key="ConnectionLOG" value="Data Source=ULISES;Initial Catalog=PUBS;user id=sa;password=as"/>
<add key="APP" value="PRUEBAS"/>
<add key="LogFile" value="c:"/>
PublisherLogSql
Este método graba en la base de datos los errores que se producen en un try … catch y se pasan los siguientes parámetros:
PublisherCustomLog
Escribe un texto en la base de datos para hacer un seguimiento. Parámetros:
WriteFileLog
Este método es igual que el método PublisherLogSql pero escribe en un fichero de disco en lugar de base de datos.
Ahora vamos a ver el funcionamiento de la clase con un ejemplo práctico, también se incluye el código.
El ejemplo simplemente se conecta con la base de datos Northwind y hace un listado con una query errónea para comprobar el funcionamiento de la clase.
Lo primero que hacemos es incorporar la librería ExceptionManager a las referencias del proyecto, con el botón derecho encima del proyecto, seleccionamos añadir referencias y en la ventana que sale buscamos la librería en disco.
Después la incluimos en nuestra página aspx.
using netveloper.library.exception;
Y ya podemos utilizarla:
string sSQL = string.Empty;
try {
DataSet ds = new DataSet();
SqlExceptionManager.PublisherCustomLog("Inicio Applicacion", false);
sSQL = "SELECT CustomerID, ContactName222 FROM Customers Order by ContactName";
SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]);
SqlCommand cmd = new SqlCommand(sSQL, conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
SqlExceptionManager.PublisherCustomLog("Carga DataSet", false);
da.Fill(ds);
SqlExceptionManager.PublisherCustomLog("Dibuja Grid View", false);
GridView1.DataSource = ds;
GridView1.DataBind();
cmd.Dispose();
conn.Dispose();
conn.Close();
}
catch (Exception EX) {
SqlExceptionManager.PublisherLogSql(EX, "Page_Load", "NO COMMENT", sSQL, false);
SqlExceptionManager.WriteFileLog(EX, "Page_Load", "NO COMMENT", sSQL, "error.txt", false);
}
Enlaces relacionadas: