Colabora .NET

Manejador de global de errores ASP.NET

 

 

Fecha: 09/Oct/2006 (04/10/06)
Autor: Pablo Laplace Kellogg - slurpo@gmail.com

 


Introducción

En 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ón

Lo 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("usuario@mail.com")

  mail.From = direccionMailFrom
  mail.IsBodyHtml = True
  mail.To.Add("destinatario@mail.com")
  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.
Una vez ejecutado este envía un email a la dirección de correo especificada con el cuerpo del mensaje incluyendo en formato HTML varios datos que pueden ser útiles para poder depurar el error que ocurrió en nuestro sistema (Función ConstruirMensaje).

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
System.Net.Mail
System.Text
 


Código de ejemplo (ZIP):

 

Fichero con el código de ejemplo: slurpo_manejador_global_errores.zip - 2 KB

(MD5 checksum: A95507E4012485AF68EB4AA7FA93C46E)

 


ir al índice principal del Guille