Det er en god ide at logge undtagelser (Exceptions), der opstår på dit webhotel. En god måde at gøre dette på er at implementere en handler på applikationsniveau via global.asax og Application_Error event'et.
Nedenstående er et lille eksempel på implementering af en Application Error Event handler, som sender en formateret undtagelse besked via E-mail. Koden skal placeres i filen "global.asax"
protected void Application_Error(Object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder(400);
sb.Append("Application Error\n\n");
// Get user IP
sb.Append("User IP :");
sb.Append(Request.UserHostAddress);
// Get the path of the page
sb.Append("\n\nError in Path :");
sb.Append(Request.Path);
// Get the QueryString along with the Virtual Path
sb.Append("\n\nError Raw Url :");
sb.Append(Request.RawUrl);
// Create an Exception object from the Last error
// that occurred on the server
Exception myError = Server.GetLastError();
// Get the error message
sb.Append("\n\nError Message :");
sb.Append(myError.Message);
// Source of the message
sb.Append("\n\nError Source :");
sb.Append(myError.Source);
// Stack Trace of the error
sb.Append("\n\nError Stack Trace :");
sb.Append(myError.StackTrace);
// inner exception
if (myError.InnerException != null)
{
sb.Append("\n\nInner exception : ");
sb.Append(myError.InnerException);
}
// Method where the error occurred
sb.Append("\n\nError TargetSite :");
sb.Append(myError.TargetSite);
// Email Exception
SmtpClient client = new SmtpClient();
MailMessage mail = new MailMessage("webadmin@firma.dk", "webadmin@firma.dk");
mail.Subject = String.Format("MySite: Application Error. ({0})",
Request.UserHostAddress);
mail.Body = sb.ToString();
client.Send(mail);
}
SmtpClient indstillinger skal konfigurers via
web.config:
<system.net>
<mailSettings>
<smtp from="admin@mysite.com">
<network host="localhost" port="25" />
</smtp>
</mailSettings>
</system.net>
Når en undtagelse (Exception) E-mail sendes til administrator, bør brugeren få vist en pæn fejlside. Dette kan konfigureres således via web.config:
<customErrors mode="On">
<error statusCode="500" redirect="~/Pages/Errors/Fejl500.aspx" />
</customErrors>