WebForm 在 Global.asax 中捕获全局异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebForm 在 Global.asax 中捕获全局异常相关的知识,希望对你有一定的参考价值。

 1         /// <summary>
 2         /// 捕获全局异常
 3         /// </summary>
 4         /// <param name="sender">sender</param>
 5         /// <param name="e">e</param>
 6         protected void Application_Error(Object sender, EventArgs e)
 7         {
 8             Exception ex = Server.GetLastError().GetBaseException();
 9             string ip = Request.ServerVariables.Get("HTTP_X_FORWARDED_FOR") == null ?
10                 Request.ServerVariables.Get("Remote_Addr").ToString().Trim() :
11                 Request.ServerVariables.Get("HTTP_X_FORWARDED_FOR").ToString().Trim();
12             string logpath = Server.MapPath("~/Log/" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt");
13             StringBuilder builder = new StringBuilder();
14             builder.AppendLine(string.Format("==========  {0} Application_Error BEGIN ==========", DateTime.Now));
15             builder.AppendLine("Ip:" + ip);
16             builder.AppendLine("浏览器:" + Request.Browser.Browser.ToString());
17             builder.AppendLine("浏览器版本:" + Request.Browser.MajorVersion.ToString());
18             builder.AppendLine("操作系统:" + Request.Browser.Platform.ToString());
19             builder.AppendLine("页面:" + Request.Url.ToString());
20             builder.AppendLine("错误信息:" + ex.Message);
21             builder.AppendLine("错误源:" + ex.Source);
22             builder.AppendLine("异常方法:" + ex.TargetSite);
23             builder.AppendLine("堆栈信息:" + ex.StackTrace);
24             builder.AppendLine("==========  Application_Error END  ===================");
25 
26             lock (logpath)
27             {
28                 try
29                 {
30                     using (var writer = new StreamWriter(logpath, true))
31                     {
32                         writer.Write(builder.ToString());
33                     }
34                 }
35                 catch
36                 {
37                     // 防止写文件时,文件被人为打开无法写入等
38                     // 记录日志报错不做处理,不应影响用户继续使用
39                 }
40             }
41 
42             Server.ClearError();
43             Response.Redirect("~/Error.htm");
44         }

 

以上是关于WebForm 在 Global.asax 中捕获全局异常的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET:在 global.asax 中未捕获安全异常

为啥 global.asax Application_Error 方法不能捕获 ASMX 服务抛出的异常?

ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常

从 global.asax 中的 Application_BeginRequest 重定向到一个动作

从global.asax中的Application_BeginRequest重定向到某个操作

性能工具MiniProfiler在Asp.Net WebForm跟踪EntityFramework