【异常类型】:{1}
【异常信息】:{2}
【堆栈调用】:{3}", new object[] { throwMsg, ex.GetType().Name, ex.Message, ex.StackTrace }); errorMsg = errorMsg.Replace("\r\n", "
"); errorMsg = errorMsg.Replace("位置", "位置"); logerror.Error(errorMsg); } #endregion 复制代码 复制代码 #region 自定义操作记录 ///
【异常类型】:{1}
【异常信息】:{2}
【堆栈调用】:{3}", new object[] { throwMsg, ex.GetType().Name, ex.Message, ex.StackTrace }); errorMsg = errorMsg.Replace("\r\n", "
"); errorMsg = errorMsg.Replace("位置", "位置"); logerror.Error(errorMsg); } #endregion 复制代码 5、有了以上的log格式,这样我就开始定义一下全局异常处理吧 我这边先创建一个全局异常处理类 GlobalExceptions.cs 然后需要在startup.cs中注入 在ConfigureServices 方法中注入。 复制代码 //注入全局异常捕获 services.AddMvc(o => { o.Filters.Add(typeof(GlobalExceptions)); }); 复制代码 6、GlobalExceptions类中添加处理,当然异常需要继承IExceptionFilter。 代码如下: GlobalExceptions 复制代码 public class GlobalExceptions : IExceptionFilter { private readonly IHostingEnvironment _env; public GlobalExceptions(IHostingEnvironment env) { _env = env; } public void OnException(ExceptionContext context) { var json = new JsonErrorResponse(); //这里面是自定义的操作记录日志 if (context.Exception.GetType() == typeof(UserOperationException)) { json.Message = context.Exception.Message; if (_env.IsDevelopment()) { json.DevelopmentMessage = context.Exception.StackTrace;//堆栈信息 } context.Result = new BadRequestObjectResult(json);//返回异常数据 } else { json.Message = "发生了未知内部错误"; if (_env.IsDevelopment()) { json.DevelopmentMessage = context.Exception.StackTrace;//堆栈信息 } context.Result = new InternalServerErrorObjectResult(json); } //采用log4net 进行错误日志记录 LogHelper.ErrorLog(json.Message, context.Exception); } } public class InternalServerErrorObjectResult : ObjectResult { public InternalServerErrorObjectResult(object value) : base(value) { StatusCode = StatusCodes.Status500InternalServerError; } } 复制代码 JsonErrorResponse.cs 复制代码 public class JsonErrorResponse { ///
【异常类型】:{1}
【堆栈调用】:{2}", new object[] { throwMsg, ex.GetType().Name, ex.StackTrace }); errorMsg = errorMsg.Replace("\r\n", "
"); errorMsg = errorMsg.Replace("位置", "位置"); logger.Error(errorMsg); } public static void InfoLog(string operateMsg) { string errorMsg = string.Format("【操作信息】:{0}
", new object[] { operateMsg }); errorMsg = errorMsg.Replace("\r\n", "
"); logger.Info(errorMsg); } } 复制代码 5、在上面log4net中的GlobalExceptions类把 LogHelper.ErrorLog(json.Message, context.Exception)替换成如下:NLogHelp.ErrorLog(json.Message,context.Exception)即可。 运行测试如下: 复制代码 【异常时间】:2018/09/03 14:41:36.786 【异常级别】:ERROR 【异常信息】:错误消息:Failed to create instance of type at AspectCore.Injector.ServiceCallSiteResolver.ResolvePropertyInject(ServiceDefinition service) 【异常类型】:InvalidOperationException 【堆栈调用】: at AspectCore.Injector.ServiceCallSiteResolver.ResolveTypeService(TypeServiceDefinition typeServiceDefinition) at AspectCore.Injector.ServiceCallSiteResolver.ResolvePropertyInject(ServiceDefinition service) at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) at AspectCore.Injector.ServiceResolver.b 复制代码 自此,完美搞定,等后期我将会介绍采用ELK+NLog进行数据采集及展示,请大家拭目以待吧。 asp.net Core 交流群:787464275 欢迎加群交流 如果您认为这篇文章还不错或者有所收获,您可以点击右下角的【推荐】按钮精神支持,因为这种支持是我继续写作,分享的最大动力! 作者:LouieGuo 声明:原创博客请在转载时保留原文链接或者在文章开头加上本人博客地址,如发现错误,欢迎批评指正。凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!https://www.cnblogs.com/guolianyu/p/9580626.html
