有人与我立黄昏,有人问我粥可温。有人与我捻熄灯,有人共我书半生。——2019/1/22

延续上一篇MVC过滤器使用实例

异常过滤器,顾名思义,就是当程序发生异常时所使用的过滤器。用于在系统出现未捕获异常时的处理。
异常过滤器用于实现IExceptionFilter接口,并在ASP.NET MVC管道执行期间引发了未处理的异常时执行。异常过滤器可用于执行诸如日志记录或显示错误页之类的任务。自定义异常筛选器继承自HandleErrorAttribute

代码很简单:在App_Start里新建一个自定义异常处理类,继承HandleErrorAttribute,并重写OnException。
另外需要新建一个文件夹,用来存储日志文件。下面代码会体现到

 public class ErrorAttribute: HandleErrorAttribute{/// <summary>/// 在发生异常时触发调用/// </summary>public override void OnException(ExceptionContext filterContext){//if (!filterContext.ExceptionHandled && filterContext.Exception is NullReferenceException)if (!filterContext.ExceptionHandled){//获取出现异常的controller名和action名,用于记录string controllerName = (string)filterContext.RouteData.Values["controller"];string actionName = (string)filterContext.RouteData.Values["action"];//定义一个HandErrorInfo,用于Error视图展示异常信息HandleErrorInfo model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);string thisTime = DateTime.Now.ToShortDateString().Replace("/","");string errorDetails = $"出错时间:{DateTime.Now.ToString()},错误发生在{model.ControllerName}控制器的{model.ActionName},错误类型:{model.Exception.Message}";string splitLine = "——————————————————————分割线——————————————————————";using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"E:\ybbb\YbbFighting\YbbFighting\ErrorTxt\"+ thisTime, true)){file.WriteLine(errorDetails);file.WriteLine(model.Exception.StackTrace);file.WriteLine(splitLine);  }ViewResult result = new ViewResult{ViewName = this.View,//设置异常时跳转的404页面ViewData = new ViewDataDictionary<HandleErrorInfo>(model)  //定义ViewData,泛型};filterContext.Result = result;filterContext.ExceptionHandled = true;//设置异常已处理}}}

注意下System.IO.StreamWriter,如果文件存在,设置为ture则向文件追加内容

在App_Start的FilterConfig里注册我们刚才写的自定义异常筛选器

新建一个Error页,就是我们注册时初始化的View,这里我发现即使不初始化View为Error,最后也会自己定向到Error页面,但是我把Error改名为Error1时,就会报错找不到Error页面,百度了下也没看到类似的情况,我也根本没在配置文件里配置这个。猜想可能是异常筛选器底层默认是Error吧。如果有大佬知道,麻烦告诉下。谢谢!

        public ActionResult NewErrorDemo(){throw new Exception("我抛出了一个错误!");return View();}

运行程序:

日志信息如图:

利用MVC异常过滤器捕获异常并写入日志记录相关推荐

  1. python读取日志错误信息_使用Python将Exception异常错误堆栈信息写入日志文件

    假设需要把发生异常错误的信息写入到log.txt日志文件中去: import traceback import logging logging.basicConfig(filename='log.tx ...

  2. python把异常写入文件_使用Python将Exception异常错误堆栈信息写入日志文件代码

    本篇文章小编给大家分享一下使用Python将Exception异常错误堆栈信息写入日志文件代码及补充知识,对大家的学习有一定的帮助,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看 ...

  3. php写入记录日志,【转】PHP错误处理写入日志记录

    ?php /** * PHP错误处理写入日志记录 * @author: lnnujxxy * @time: 2009-09-23 * //使用方法: * require './error_handle ...

  4. Java学习day051 记录日志(基本日志、高级日志、修改日志管理器配置、本地化、处理器、过滤器、格式化器、日志记录说明)

    使用的教材是java核心技术卷1,我将跟着这本书的章节同时配合视频资源来进行学习基础java知识. day051   记录日志(基本日志.高级日志.修改日志管理器配置.本地化.处理器.过滤器.格式化器 ...

  5. NestJS 7.x 折腾记: (6) 异常过滤器,取其精华去其糟粕!比如响应异常数据的包装~

    前言 正如官方所说: 内置的异常层负责处理整个应用程序中的所有抛出的异常. 当捕获到未处理的异常时,最终用户将收到友好的响应. NestJS提供了一波拿来即用的内置异常过滤器; 在@nestjs/co ...

  6. 基于.NetCore3.1系列 —— 日志记录之初识Serilog

    前言 对内置日志系统的整体实现进行了介绍之后,可以通过使用内置记录器来实现日志的输出路径.而在实际项目开发中,使用第三方日志框架(如:Log4Net.NLog.Loggr.Serilog.Sentry ...

  7. Linux 之log 日志记录

    在Linux 中可以用syslog 函数向系统日志文件中写入日志记录,日志记录正常在/var/log/messages文件里,在syslog使用时在哪里需要记录日志的地方调用该函数即可. openlo ...

  8. ASP.NET MVC HandleError异常过滤器过滤器用法

    异常过滤器是处理代码异常的,在系统的代码抛错的时候执行,MVC默认已经实现了异常过滤器,并且注册到了App_Start目录下的FilterConfig.cs: filters.Add(new Hand ...

  9. MVC与WebApi中的异常过滤器

    MVC与WebApi中的异常过滤器 参考文章: (1)MVC与WebApi中的异常过滤器 (2)https://www.cnblogs.com/mstmdev/p/5471099.html 备忘一下.

最新文章

  1. tof摄像头手势识别_行业深度光学行业研究:CIS、光学元件、指纹识别、镜头模组...
  2. oracle jvm规范官网下载及相关书籍推荐
  3. Windows搭建FTP服务
  4. flink的DAG可视化使用(visualizer的使用)
  5. C语言的argv小案例
  6. 欠拟合和过拟合的一般解决方法
  7. 洗衣机一边进水一边出水 更换排水阀皮碗
  8. python3 django 中文乱码_python3 wsgi服务和响应数据中文乱码问题
  9. listview控件在php的使用方法,VBA窗体之ListView控件的基本应用 | VBA实例教程
  10. java 权限管理框架
  11. 低信噪比环境下GPS信号识别捕获技术
  12. linux编译lame,linux 下安装lame以及tritonus-mp3enc
  13. 计算机创新应用,计算机的发展及应用创新.ppt
  14. Java校招面经_小米java校招面经,面试题整理(一面)
  15. 如何将.m4a转.wav文件
  16. 如何给table里的input赋值
  17. 中国体育场馆行业运营管理现状及十四五模式分析报告2022版
  18. 唯快不破:redis源码剖析04-sds动态字符串
  19. 从工作量证明(POW)到高阶工作量证明(HPOW)
  20. “五四”青年节,我们采访了十位驭势青年

热门文章

  1. 基于易灵思开发板RiscV的调试流程
  2. 《我的眼睛--图灵识别》第十一章:实战演练:图像类识别
  3. Samba客户端工具
  4. 2019年8月桌面CPU性能天梯图
  5. element中组件el-autocomplete远程搜索之精确匹配和模糊匹配
  6. elementui的el-autocomplete远程搜索组件如何回显结果
  7. linux-字体显示样式
  8. PCIe设备驱动demo
  9. 两级分销加两级代理佣金计算工具
  10. java转义字符 \\