Colabora .NET |
Manejador de global de errores ASP.NET
Fecha: 09/Oct/2006 (04/10/06)
|
IntroducciónEn este articulo voy a explicar como utilizar un manejador global de errores para ASP.NET, el cual puede enviar un correo electrónico con la descripción del error y otros datos.
DescripciónLo que hay que hacer es utilizar el evento Global_Error del archivo global.asax de tu proyecto web. Allí dentro va a ser donde ingresaremos el código para manejar el error.
El código:A continuación sigue código en Visual Basic .NET: Sub Global_Error(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Error ' Se ejecuta cuando hay un error en la aplicación. Dim mail As New MailMessage() Dim emailClient As New SmtpClient(ip_servidor_correo) Dim direccionMailFrom As New MailAddress("[email protected]") mail.From = direccionMailFrom mail.IsBodyHtml = True mail.To.Add("[email protected]") mail.Subject = "Asunto" mail.Body = ConstruirMensaje() mail.Priority = MailPriority.Normal emailClient.Send(mail) If MostrarWEBErrorPersinalizada() = True Then Server.ClearError() Response.Redirect("/ErrorPersonalizado.htm") End If End Sub Function ConstruirMensaje() As String Dim strMessage As New StringBuilder() On Error Resume Next strMessage.Append("<!DOCTYPE HTML PUBLIC ""-"//W3C//DTD HTML 4.01 Transitional//EN"">") strMessage.Append("<html>") strMessage.Append("<head>") strMessage.Append("<title>Error en Sistema de Clínicas</title>") strMessage.Append("<meta http-equiv=""Content-Type"" content=""text/html; " & _ "charset=iso-8859-1"">") strMessage.Append("<style type=""text/css"">") strMessage.Append("<!--") strMessage.Append(".basix {") strMessage.Append("font-family: Verdana, Arial, Helvetica, sans-serif;") strMessage.Append("font-size: 12px;") strMessage.Append("}") strMessage.Append(".header1 {") strMessage.Append("font-family: Verdana, Arial, Helvetica, sans-serif;") strMessage.Append("font-size: 12px;") strMessage.Append("font-weight: bold;") strMessage.Append("color: #000099;") strMessage.Append("}") strMessage.Append(".tlbbkground1 {") strMessage.Append("background-color: #000099;") strMessage.Append("}") strMessage.Append("-->") strMessage.Append("</style>") strMessage.Append("</head>") strMessage.Append("<body>") strMessage.Append("<table width=""85%"" border=""0"" align=""center"" " & _ "cellpadding=""5"" " & _ "cellspacing=""1"" class=""tlbbkground1"">") strMessage.Append("<tr bgcolor=""#eeeeee"">") strMessage.Append("<td colspan=""2"" class=""header1"">Error en Sistema de Clínicas</td>") strMessage.Append("</tr>") strMessage.Append("<tr>") strMessage.Append("<td width=""100"" align=""right"" bgcolor=""#eeeeee"" " & _ "class=""header1"" nowrap>Fecha y Hora</td>") strMessage.Append("<td bgcolor=""#FFFFFF"" class=""basix"">" & _ System.DateTime.Now & " EST</td>") strMessage.Append("</tr>") strMessage.Append("<tr>") strMessage.Append("<td width=""100"" align=""right"" bgcolor=""#eeeeee"" " & _ "class=""header1"" nowrap>Cliente WEB</td>") strMessage.Append("<td bgcolor=""#FFFFFF"" class=""basix"">" & _ Request.ServerVariables("HTTP_USER_AGENT") & "</td>") strMessage.Append("</tr>") strMessage.Append("<tr>") strMessage.Append("<td width=""100"" align=""right"" bgcolor=""#eeeeee"" " & _ "class=""header1"" nowrap>Dirección IP</td>") strMessage.Append("<td bgcolor=""#FFFFFF"" class=""basix"">" & _ Request.ServerVariables("REMOTE_ADDR") & "</td>") strMessage.Append("</tr>") strMessage.Append("<tr>") strMessage.Append("<td width=""100"" align=""right"" bgcolor=""#eeeeee"" " & _ "class=""header1"" nowrap>Versión</td>") strMessage.Append("<td bgcolor=""#FFFFFF"" class=""basix"">" & _ System.Reflection.Assembly.GetExecutingAssembly.GetName.Version.ToString & "</td>") strMessage.Append("</tr>") strMessage.Append("<tr>") strMessage.Append("<td width=""100"" align=""right"" bgcolor=""#eeeeee"" " & _ "class=""header1"" nowrap>Página</td>") strMessage.Append("<td bgcolor=""#FFFFFF"" class=""basix"">" & _ Request.Url.AbsoluteUri & "</td>") strMessage.Append("</tr>") strMessage.Append("<tr>") strMessage.Append("<td width=""100"" align=""right"" bgcolor=""#eeeeee"" " & _ "class=""header1"" nowrap>Usuario</td>") strMessage.Append("<td bgcolor=""#FFFFFF"" class=""basix"">" & _ Context.User.Identity.Name.ToString & "</td>") strMessage.Append("</tr>") strMessage.Append("<tr>") strMessage.Append("<td width=""100"" align=""right"" bgcolor=""#eeeeee"" " & _ "class=""header1"" nowrap>Message</td>") strMessage.Append("<td bgcolor=""#FFFFFF"" class=""basix"">" & _ Server.GetLastError().InnerException.ToString() & "</td>") strMessage.Append("</tr>") strMessage.Append("<tr>") strMessage.Append("<td width=""100"" align=""right"" bgcolor=""#eeeeee"" " & _ "class=""header1"" nowrap>InnerException</td>") strMessage.Append("<td bgcolor=""#FFFFFF"" class=""basix"">" & _ Server.GetLastError().Message.ToString() & "</td>") strMessage.Append("</tr>") strMessage.Append("<tr>") strMessage.Append("<td width=""100"" align=""right"" bgcolor=""#eeeeee"" " & _ "class=""header1"" nowrap>Source</td>") strMessage.Append("<td bgcolor=""#FFFFFF"" class=""basix"">" & _ Server.GetLastError().Source.ToString() & "</td>") strMessage.Append("</tr>") strMessage.Append("<tr>") strMessage.Append("<td width=""100"" align=""right"" bgcolor=""#eeeeee"" " & _ "class=""header1"" nowrap>StackTrace</td>") strMessage.Append("<td bgcolor=""#FFFFFF"" class=""basix"">" & _ Server.GetLastError().StackTrace.ToString() & "</td>") strMessage.Append("</tr>") strMessage.Append("<tr>") strMessage.Append("<td width=""100"" align=""right"" bgcolor=""#eeeeee"" " & _ "class=""header1"" nowrap>TargetSite</td>") strMessage.Append("<td bgcolor=""#FFFFFF"" class=""basix"">" & _ Server.GetLastError.TargetSite.ToString & "</td>") strMessage.Append("</tr>") strMessage.Append("<tr>") strMessage.Append("<td width=""100"" align=""right"" bgcolor=""#eeeeee"" " & _ "class=""header1"" nowrap>Data</td>") strMessage.Append("<td bgcolor=""#FFFFFF"" class=""basix"">" & _ Server.GetLastError.Data.Item(0).ToString & "</td>") strMessage.Append("</tr>") strMessage.Append("</table>") strMessage.Append("</body>") strMessage.Append("</html>") Return strMessage.ToString End Function Explicación.Cuando se produce un error en cualquier parte del sistema (siempre
y cuando no tenga un Try Catch propio) el error es capturado por el evento
Global_Error. Además si el sistema esta configurado (función
MostrarWEBErrorPersinalizada()) para que muestre una pagina de error
personalizada por nosotros el usuario no vera el error ocurrido en el sistema
sino que podrá ser informado de una manera mas correcta que sucedió un error y
que pasos seguir.
Espacios de nombres usados en el código de este artículo:System.Web |
Código de ejemplo (ZIP): |
Fichero con el código de ejemplo: slurpo_manejador_global_errores.zip - 2 KB
|