static void

ASP Error Handling

With log4net. See more

Web.config (log4net)

        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
        <appender name="File" type="log4net.Appender.RollingFileAppender">
            <file value="log4net.log"/>
            <appendToFile value="true"/>
            <rollingStyle value="Date"/>
            <datePattern value="yyyyMMdd"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline"/>
            <level value="ERROR"/>
            <appender-ref ref="File"/>


void Application_Error(object sender, EventArgs e)
    // Code that runs when an unhandled error occurs
    Exception ex = HttpContext.Current.Server.GetLastError();
    if (ex != null)
void Application_Start(object sender, EventArgs e)
    // Code that runs on application startup
    log4net.Config.XmlConfigurator.Configure(); //comment this to stop logging

Error Logging class

From: ASP.NET 2.0 Anthology, 2007.

using System;
using System.Reflection;
using System.Text;
using System.Web;
using log4net;
public static class ErrorHandler
    private static readonly ILog Log = LogManager.GetLogger(typeof(ErrorHandler));
    public static void HandleException(Exception ex)
        if (ex == null) return;
        Exception exceptionLayer = null;
        if (ex is HttpUnhandledException)
            if (ex.InnerException != null)
                exceptionLayer = ex.InnerException;
            exceptionLayer = ex;
        StringBuilder sb = new StringBuilder();
        while (exceptionLayer != null)
            exceptionLayer = exceptionLayer.InnerException;

Quick text logging (no log4net)

private void SaveError()
    Exception lastError = Server.GetLastError();
    if (lastError == null) return;
    if (lastError.InnerException != null)
        lastError = lastError.GetBaseException();
    using (System.IO.StreamWriter sw = new System.IO.StreamWriter(Server.MapPath("~/error.txt"), true))
        sw.WriteLine("{0} [{1}] {2}", DateTime.Now, lastError.Message, lastError.GetType());