博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第三节:使用Log4net和过滤器记录异常信息,返回异常给前端
阅读量:4983 次
发布时间:2019-06-12

本文共 3229 字,大约阅读时间需要 10 分钟。

上次面试,遇到,在项目中如何处理业务异常和代码异常,使用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
{ Message = "错误路径:" + errorPath + ":错误信息" + exception.Message+"", IsSucceed = false }); //异常已处理了 context.ExceptionHandled = true; }}

使用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} 
【异常类型】:{1}
【异常信息】:{2}
【堆栈调用】:{3}", new object[] { msg, ex.GetType().Name, ex.Message, ex.StackTrace }); errorMsg = errorMsg.Replace("\r\n", "
"); errorMsg = errorMsg.Replace("位置", "位置"); 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); }}

在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";            });

转载于:https://www.cnblogs.com/lifeng618/p/9630570.html

你可能感兴趣的文章
LeetCode 第206题 反转链表
查看>>
Linux—Ubuntu14.0.5设置MySQL的字符集
查看>>
洛谷P1886 滑动窗口
查看>>
Shell编程(二)Bash中调用Python
查看>>
mysql生成数据字典
查看>>
iptables 代理设置
查看>>
String方法的应用:
查看>>
swift 中guard where
查看>>
前端css
查看>>
【机器学习】K-Means算法
查看>>
Java -- JDBC mysql读写大数据,文本 和 二进制文件
查看>>
ASP.NET MVC5----常见的数据注解和验证
查看>>
STM32F072从零配置工程-基于HAL库的串口UART中断配置
查看>>
linux通过c++实现线程池类
查看>>
webpack
查看>>
[转]NopCommerce之视图设计
查看>>
[转]微信公众平台开发入门教程
查看>>
[转].net自定义验证控件CustomValidator的使用
查看>>
c#怎么获取当前页面的url
查看>>
Python Unicode编码方式
查看>>