分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

第三节:使用Log4net和过滤器记录异常信息,返回异常给前端

发布时间:2023-09-06 02:14责任编辑:董明明关键词:前端

上次面试,遇到,在项目中如何处理业务异常和代码异常,使用txt记录异常信息后,如何直接区分出异常的类型,异常怎么分类处理,希望大家能帮我提出宝贵的意见,完善处理异常,

统一返回参数

???
 ???public class HeaderResult ???{ ???????public HeaderResult() ???????{ ???????????// ReSharper disable once VirtualMemberCallInConstructor ???????????IsSucceed = false; ???????} ????????????public virtual bool IsSucceed { get; set; } ??????????????public virtual string Message { get; set; } ?????????????public virtual T Result { get; set; } ??????????????public virtual string StatusCode { get; set; } ???} ???

创建一个过滤器

在过滤器中拦截异常信息,使用Log4net 记录日志到txt中,获取到异常信息统一返回给前端


 ???public class ProjectExceptionFilter : IExceptionFilter { ???public void OnException(ExceptionContext context) ???{ ???????????????Exception exception = context.Exception; ???????var exceptionType = exception.GetType().ToString(); ???????if (exceptionType == "ProjectCore.Common.DomainException") ???????{ ???????????//用来分类处理业务逻辑 ???????} ???????//获取controller的名称 ???????var controller = context.RouteData.Values["controller"].ToString(); ???????//获取Action的名称 ???????var action = context.RouteData.Values["Action"].ToString(); ???????var errorPath = controller + "/" + action; ???????LogHelper.LogError("web service error:" + errorPath, exception); ??????????????????//返回异常信息给前端 ???????context.Result = new JsonResult(new HeaderResult<string> ???????{ ???????????Message = "错误路径:" + errorPath + ":错误信息" + exception.Message+"", ???????????IsSucceed = false ???????}); ????????????????//异常已处理了 ???????context.ExceptionHandled = true; ?????????????}}</pre>

使用Log4net 记录日志到txt中 log4net.config网上有许多,这里就不贴出来了


 ???public static class LogHelper{ ???private static ILog _logger; ???static LogHelper() ???{ ???????ILoggerRepository repository = LogManager.CreateRepository("NETCoreRepository"); ???????XmlConfigurator.Configure(repository, new FileInfo("log4net.config")); ?????????????????LogHelper._logger = LogManager.GetLogger(repository.Name, "NETCorelog4net"); ???} ???public static void LogError(string msg, Exception ex) ???{ ???????string errorMsg = string.Format("【抛出信息】:{0} <br/>【异常类型】:{1} <br/>【异常信息】:{2} <br/>【堆栈调用】:{3}", new object[] { msg, ???????ex.GetType().Name, ex.Message, ex.StackTrace }); ???????errorMsg = errorMsg.Replace("\r\n", "<br>"); ???????errorMsg = errorMsg.Replace("位置", "<strong style=\"color:red\">位置</strong>"); ????????????????LogHelper._logger.Error(errorMsg); ???} ???public static void LogInfo(string msg) ???{ ???????LogHelper._logger.Info((object)msg); ???} ???public static void LogDebug(string msg) ???{ ???????LogHelper._logger.Debug((object)msg); ???}}</pre>

在Startup 下面配置


 ??????services.AddMvc(options => ???????{ ???????????options.Filters.Add(typeof(ProjectExceptionFilter)); ?????????????????????????options.Filters.Add(typeof(ModelVerificationFilter)); ?????????????????????}). ??????????SetCompatibilityVersion(CompatibilityVersion.Version_2_1). ???????????AddJsonOptions(options => ???????????{ ???????????????//忽略循环引用 ???????????????options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; ???????????????//不使用驼峰样式的key ???????????????options.SerializerSettings.ContractResolver = new DefaultContractResolver(); ???????????????//设置时间格式 ???????????????options.SerializerSettings.DateFormatString = "yyyy-MM-dd"; ???????????});</pre>

第三节:使用Log4net和过滤器记录异常信息,返回异常给前端

原文地址:https://www.cnblogs.com/lifeng618/p/9630570.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved