zoukankan      html  css  js  c++  java
  • .NET Core通过异常过滤器(ExceptionFilterAttribute)实现全局异常捕获和日志记录

    1.一共有五类过滤器IAsyncAuthorizationFilter  IAsyncResourceFilter   IAsyncActonFilter  IAsyncExceptionFilter    IAsyncResultFilter 去掉Async就是同步的

    2.注册过滤器  全局注册和Attribute注册 用在特定的Action上

    通过ExceptionFilterAttribute过滤器实现全局异常处理

    (1)新建ErrorFilterAttribute.cs文件继承ExceptionFilterAttribute类,实现OnException方法

            /// <summary>
            /// 处理异常信息
            /// </summary>
            /// <param name="context"></param>
            public override void OnException(ExceptionContext context)
            {
                ContentResult result = new ContentResult
                {
                    StatusCode = 500,
                    ContentType = "application/json; charset=utf-8"
                };
    
                var error = new ErrorEntity
                {
                    CreateDate = DateTime.Now,
                    DealData = "",
                    ErrorFrom = ErrorFrom.Site,
                    Exception = context.Exception.ToString(),
                    IsSolved = false,
                    OsInfo = Environment.OSVersion.Platform.ToString(),
                    Solution = "",
                    SolvedBy = "",
                    UserId = context.HttpContext.AuthenticateAsync().Result.Principal.CurUserID(),
                    Version = "1.0.0",
                    StackTrace = context.Exception.StackTrace
                };
                var thread = new Thread(AddError);
                thread.Start(error);
    
                result.Content = JsonConvert.SerializeObject(new MethodResult(context.Exception.Message));
                context.Result = result;
                context.ExceptionHandled = true;
                context.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
            }

    (2) 异常写入数据库中

            /// <summary>
            /// 异步保存异常信息
            /// </summary>
            /// <param name="obj"></param>
            public void AddError(object obj)
            {
                var error = obj as ErrorEntity;
                if (error == null) return;
                var service = new ErrorService();
                service.AddError(error);
            }

    (3) 在Startup=》ConfigureServices方法中全局注册异常过滤器ErrorFilterAttribute

    services.AddMvc(opt =>
                {
                    opt.Filters.Add<ErrorFilterAttribute>();
                });
  • 相关阅读:
    Eclipse启动Tomcat报错,系统缺少本地apr库
    Linux(Debian)下Maven的安装
    Debian ls 文件 文件夹颜色显示
    Mybatis3.0防止SQL注入
    MySql初始配置
    文档在线预览开源实现方案一:OpenOffice + SwfTools + FlexPaper
    Java多线程的信号量
    判断线程池中的线程是否全部执行完毕
    一个简单的死锁
    使用并发来提高数据抓取的效率
  • 原文地址:https://www.cnblogs.com/ZhengHengWU/p/12768499.html
Copyright © 2011-2022 走看看