利用MVC异常过滤器捕获异常并写入日志记录
有人与我立黄昏,有人问我粥可温。有人与我捻熄灯,有人共我书半生。——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异常过滤器捕获异常并写入日志记录相关推荐
- python读取日志错误信息_使用Python将Exception异常错误堆栈信息写入日志文件
假设需要把发生异常错误的信息写入到log.txt日志文件中去: import traceback import logging logging.basicConfig(filename='log.tx ...
- python把异常写入文件_使用Python将Exception异常错误堆栈信息写入日志文件代码
本篇文章小编给大家分享一下使用Python将Exception异常错误堆栈信息写入日志文件代码及补充知识,对大家的学习有一定的帮助,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看 ...
- php写入记录日志,【转】PHP错误处理写入日志记录
?php /** * PHP错误处理写入日志记录 * @author: lnnujxxy * @time: 2009-09-23 * //使用方法: * require './error_handle ...
- Java学习day051 记录日志(基本日志、高级日志、修改日志管理器配置、本地化、处理器、过滤器、格式化器、日志记录说明)
使用的教材是java核心技术卷1,我将跟着这本书的章节同时配合视频资源来进行学习基础java知识. day051 记录日志(基本日志.高级日志.修改日志管理器配置.本地化.处理器.过滤器.格式化器 ...
- NestJS 7.x 折腾记: (6) 异常过滤器,取其精华去其糟粕!比如响应异常数据的包装~
前言 正如官方所说: 内置的异常层负责处理整个应用程序中的所有抛出的异常. 当捕获到未处理的异常时,最终用户将收到友好的响应. NestJS提供了一波拿来即用的内置异常过滤器; 在@nestjs/co ...
- 基于.NetCore3.1系列 —— 日志记录之初识Serilog
前言 对内置日志系统的整体实现进行了介绍之后,可以通过使用内置记录器来实现日志的输出路径.而在实际项目开发中,使用第三方日志框架(如:Log4Net.NLog.Loggr.Serilog.Sentry ...
- Linux 之log 日志记录
在Linux 中可以用syslog 函数向系统日志文件中写入日志记录,日志记录正常在/var/log/messages文件里,在syslog使用时在哪里需要记录日志的地方调用该函数即可. openlo ...
- ASP.NET MVC HandleError异常过滤器过滤器用法
异常过滤器是处理代码异常的,在系统的代码抛错的时候执行,MVC默认已经实现了异常过滤器,并且注册到了App_Start目录下的FilterConfig.cs: filters.Add(new Hand ...
- MVC与WebApi中的异常过滤器
MVC与WebApi中的异常过滤器 参考文章: (1)MVC与WebApi中的异常过滤器 (2)https://www.cnblogs.com/mstmdev/p/5471099.html 备忘一下.
最新文章
- tof摄像头手势识别_行业深度光学行业研究:CIS、光学元件、指纹识别、镜头模组...
- oracle jvm规范官网下载及相关书籍推荐
- Windows搭建FTP服务
- flink的DAG可视化使用(visualizer的使用)
- C语言的argv小案例
- 欠拟合和过拟合的一般解决方法
- 洗衣机一边进水一边出水 更换排水阀皮碗
- python3 django 中文乱码_python3 wsgi服务和响应数据中文乱码问题
- listview控件在php的使用方法,VBA窗体之ListView控件的基本应用 | VBA实例教程
- java 权限管理框架
- 低信噪比环境下GPS信号识别捕获技术
- linux编译lame,linux 下安装lame以及tritonus-mp3enc
- 计算机创新应用,计算机的发展及应用创新.ppt
- Java校招面经_小米java校招面经,面试题整理(一面)
- 如何将.m4a转.wav文件
- 如何给table里的input赋值
- 中国体育场馆行业运营管理现状及十四五模式分析报告2022版
- 唯快不破:redis源码剖析04-sds动态字符串
- 从工作量证明(POW)到高阶工作量证明(HPOW)
- “五四”青年节,我们采访了十位驭势青年