当一个异常在调用堆栈中没有被处理,也没有被框架代码处理时,我们说这个异常未处理,它将被ASP.NET捕获,ASP.NET对此未处理错误的处理方法是显示一个页面,列出该未处理异常的详细情况。
有两个在异常未处理时将被ASP.NET调用的事件:
Page_Error event,它提供捕获在Page级别发生错误的方法。
Application_Error event,它提供捕获在代码中的任何地方发生错误的方法。该事件的范围是整个应用程序,这使它成为添加日志代码的一个理想地方。
这两个事件的执行顺序是——先执行Page_Error,后执行Application_Error。如果希望在Page_Error中处理过的错误就不要再在Application_Error中处理,我们可以在Page_Error中处理错误之后,使用Server.ClearError方法清除最后一个错误,避免再调用Application_Error
我们可以在Global.asax文件中找到这应用程序级错误事件Application_Error,用以下代码记录我们的错误日志。
        protected void Application_Error(Object sender, EventArgs e)
        {
            EventLog.WriteEntry("MyProject",
                Server.GetLastError().InnerException.Message,
                EventLogEntryType.Error);
        }
然后我们可以在“控制面板->管理工具->事件查看器”中查看我们的错误日志。