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>();
                });
  • 相关阅读:
    Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理
    mysql 索引
    C++ 后台进程 daemon
    Linux进程状态
    实现一个简单的shared_ptr
    [LeetCode] Factorial Trailing Zeroes
    完美转发
    排序
    每天五个java相关面试题(7)--线程篇
    程序员为什么会淡忘?
  • 原文地址:https://www.cnblogs.com/ZhengHengWU/p/12768499.html
Copyright © 2011-2022 走看看