ASP.NET Core 中间件的使用之全局异常处理机制 |
|
前言: 我们经常听到“秒修复秒上线”,觉得很厉害的样子 。 其实不然,这只是一个调侃而已,出现问题的方式很多(逻辑漏洞、代码异常、操作方式不正确等) 。 我们今天来说代码异常问题怎么快速定位,减少不必要的时间浪费 。 这就是今天的主题“添加全局异常处理机制”捕捉异常存储到数据库(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("
"));
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、测试全局异常处理机制“将
运行项目后我们查询一下数据库,发现捕捉到错误信息了,包括
下面是控制器方法截图
到此这篇关于 |