架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 20136|回复: 0

[ASP.NET] asp.net MVC全局异常处理与异常日志

[复制链接]
发表于 2016-10-18 20:44:49 | 显示全部楼层 |阅读模式
在MVC3网站的global.asax中的Application_Start方法里,有这样一段代码 

  1. RegisterGlobalFilters(GlobalFilters.Filters);
复制代码


它的主要使用是将全局过滤器进行注册,而全局过滤器可以在RegisterGlobalFilters这个方法里进行设置,如代码:

  1. /// <summary>
  2.         /// 全局过滤器(特性)
  3.         /// </summary>
  4.         /// <param name="filters"></param>
  5.         public static void RegisterGlobalFilters(GlobalFilterCollection filters)
  6.         {
  7.             // ExceptionLogAttribute继承自HandleError,主要作用是将异常信息写入日志系统中
  8.             filters.Add(new Web.Commons.Attributes.ExceptionLogAttribute());
  9.             //默认的异常记录类
  10.             filters.Add(new HandleErrorAttribute());
  11.         }
复制代码


使用HandleErrorAttribute处理异常很简单,首先要开启Web.config配置文件中的自定义错误,因为HandleError特性是依赖自定义错误的,customErrors的Mode必须要设置为On或RemoteOnly:

  1. <customErrors mode="On" defaultRedirect="~/Error/Index"></customErrors>
复制代码



因此除了500错误,其他错误只能通过自定义错误模块配置响应的页面:

  1. <customErrors mode="On" defaultRedirect="~/Error/Index">
  2.   <error redirect="~/Error/NotFound" statusCode="404"/>
  3.   <error redirect="~/Error/NotFound" statusCode="400"/>
  4. </customErrors>
复制代码


当我们设置完上面两块后,现在如果想记异常日志,那我们需要完善一下ExceptionLogAttribute这个类,看代码:

  1. /// <summary>
  2.     /// 异常持久化类
  3.     /// </summary>
  4.     public class ExceptionLogAttribute : HandleErrorAttribute
  5.     {
  6.         /// <summary>
  7.         /// 触发异常时调用的方法
  8.         /// </summary>
  9.         /// <param name="filterContext"></param>
  10.         public override void OnException(ExceptionContext filterContext)
  11.         {

  12.             string message = string.Format("消息类型:{0}<br>消息内容:{1}<br>引发异常的方法:{2}<br>引发异常的对象:{3}<br>异常目录:{4}<br>异常文件:{5}"
  13.                 , filterContext.Exception.GetType().Name
  14.                 , filterContext.Exception.Message
  15.                 , filterContext.Exception.TargetSite
  16.                 , filterContext.Exception.Source
  17.                 , filterContext.RouteData.GetRequiredString("controller")
  18.                 , filterContext.RouteData.GetRequiredString("action"));
  19.             VLog.VLogFactory.CreateVLog().ErrorLog(message); //TODO:将 ex 错误对象记录到系统日志模块
  20.             base.OnException(filterContext);
  21.         }
  22.     }
复制代码


大家可以看到,在上面类中,有个CreateVLog的方法,它是干什么用的呢,实事上,它就是我们的日志功能类,可以对日志进行不同类型的持久化,这我会在单独一讲中去说明它。

今天主要就是MVC3中的全局异常的记录方法,呵呵。









上一篇:C#在多线程环境中,进行安全遍历操作
下一篇:asp.net将appSettings写在外面的文件
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2026-10-29 23:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表