在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前言: 我们经常听到“秒修复秒上线”,觉得很厉害的样子。 其实不然,这只是一个调侃而已,出现问题的方式很多(逻辑漏洞、代码异常、操作方式不正确等)。 我们今天来说代码异常问题怎么快速定位,减少不必要的时间浪费。 这就是今天的主题“添加全局异常处理机制”捕捉异常存储到数据库(mongodb、SqlServer、MySQL等)。 PS:输出txt的话不怎么友好,不是所有人都能登录服务器的。
1、创建项目我们创建一个 2、创建全局异常过滤器在控制器里面创建一个异常过滤器,命名为 注意,我这里入库用的是 异常过滤器,顾名思义,就是当程序发生异常时所使用的过滤器。用于在系统出现未捕获异常时的处理。 实现一个自定义异常过滤器,自定义一个全局异常过滤器需要实现 OnException方法有一个 系统一旦出现未捕获异常后,比较常见的做法就是使用日志工具,将异常的详细信息记录下来,方便修正调试。 下面是日志记录的实现: using Microsoft.AspNetCore.Mvc.Filters; using System; namespace Log4NetWebAPI.Controllers { public class ExceptionFilter: IExceptionFilter { //全局异常处理机制 public void OnException(ExceptionContext context) { Exception ex = context.Exception; //错误所在的控制器方法名称 var DisplayName = context.ActionDescriptor.DisplayName; #region 错误所在的行号行号 ////行号前的名称有的是中文,有的是英文,注意甄别 //var aaa = ex.StackTrace.Substring(ex.StackTrace.IndexOf("行号"), ex.StackTrace.Length - ex.StackTrace.IndexOf("行号")); //var ccc = ex.StackTrace.Substring(ex.StackTrace.IndexOf("line"), ex.StackTrace.Length - ex.StackTrace.IndexOf("line")); var lineNumber = 0; const string lineSearch = ":line "; var index = ex.StackTrace.LastIndexOf(lineSearch); if (index != -1) { var lineNumberText = ex.StackTrace.Substring(index + lineSearch.Length); var lineNumberStr = lineNumberText.Substring(0, lineNumberText.IndexOf("\r\n")); if (int.TryParse(lineNumberStr, out lineNumber)) { } } #endregion #region 写入信息到【数据库】,这里自行入库即可(mongodb、SqlServer、MySQL等),我以SqlServer为例 errorLog md = new errorLog(); md.logTime = DateTime.Now; md.logType = "error"; md.displayName = DisplayName; //错误位置 md.lineNumber = lineNumber; //错误行号 md.message = ex.Message; //错误信息 md.messagedetails = ex.ToString(); //错误详情 md.createTime= DateTime.Now; using (var ctx = new dbContext()) { ctx.Add(md); ctx.SaveChanges(); } #endregion //下面是你的返回页面显示的内容提示,以下省略 } } } 3、依赖注入全局异常处理机制在
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllers(); //添加全局异常处理机制 services.AddMvc(option => { option.Filters.Add<ExceptionFilter>(); }); } 4、测试全局异常处理机制“将
运行项目后我们查询一下数据库,发现捕捉到错误信息了,包括
下面是控制器方法截图 到此这篇关于 |
请发表评论