Segnalatore di errori nel sito

Se un'applicazione è nella fase di test può essere utile venire a conoscenza degli errori che si verificano durante la navigazione. Con questo script ci sarà inviata una email in caso si verificassero errori:

<%@ Application language="C#"%> 
<%@ Import Namespace="System.Diagnostics" %> <script runat="server">
public void Application_Error(Object sender, EventArgs e) {
StringBuilder strError = new StringBuilder();
int innerLevel = 0;
Exception ex = Server.GetLastError();
strError.Append("<font face=tahoma size=1>");
while ( ex != null ) {
strError.AppendFormat("Application Error (inner={0}): {1}<br><br>", 
innerLevel, ex.GetType().Name);
strError.Append( "<b><font size=3 color=#800000>" 
+ ex.Message + "</font></b><br><br>" 
);
strError.Append( "<b>Source:</b> " + ex.Source 
+ "<br><br>" );
string strStack = ex.StackTrace;
strStack = strStack.Replace("\r\n", "<br>");
strError.Append( "<b>StackTrace:</b> <table 
cellspacing=0 cellpadding=2 border=0 bgcolor=#FFFFCC><tr><td><font 
face=tahoma size=1>" + strStack + "</font></td></tr></table><br>" 
);
ex = ex.InnerException;
innerLevel++;
}
strError.Append("Indirizzo IP client: " + (string) 
Request.ServerVariables["REMOTE_ADDR"'>);
strError.Append("</font>");
// Spedisco l'email con la segnalazione dell'errore
System.Web.Mail.MailMessage mailMessage = new System.Web.Mail.MailMessage();
mailMessage.From = "webmaster@tuosito.com";
mailMessage.To = "tuocasella@diposta.com";
mailMessage.Subject = "Si è verificato un errore nel 
tuo sito";
mailMessage.BodyFormat = System.Web.Mail.MailFormat.Html;
mailMessage.Body = strError.ToString();
try {
System.Web.Mail.SmtpMail.SmtpServer = "localhost";
System.Web.Mail.SmtpMail.Send(mailMessage);
Response.Redirect("PaginaDiErrore.html"); // Rimando il 
client ad una pagina generica di errore
} catch (Exception ex2) {
// Il sistema non è riuscito ad inviare l'email,
// scrivo il problema nel Debug
Debug.WriteLine( "Eccezione durante l'invio dell'e-mail: " 
+ ex2.GetType().Name );
Debug.WriteLine( ex2.Message );
Debug.WriteLine( ex2.StackTrace );
}
}
</script>