MVC 中创建自己的异常处理

1.新建类一个类继承 HandleErrorAttribute 类把异常书写到队列中

 1  public class MyExceptionAttribute: HandleErrorAttribute
 2     {
 3         //新建队列
 4          public static Queue<Exception> queueException = new Queue<Exception>();
 5         //重写OnException方法(在程序遇到异常时触发这个方法)
 6         public override void OnException(ExceptionContext filterContext)
 7         {
 8             //访问父类中的异常触发,并把异常信息传过去
 9             base.OnException(filterContext);
10             //入队
11             queueException.Enqueue(filterContext.Exception);
12             //跳转到异常页面
13             filterContext.HttpContext.Response.Redirect("~/Global/Error");
14         }
15     }

2.在 FilterConfig 注册我们自定义的异常处理类

 public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            //filters.Add(new HandleErrorAttribute());
            filters.Add(new MyExceptionAttribute());
        }
    }

3.在Global文件中新增一个线程池专门读取队里的异常数据,写进日志文件(可以根据自己的项目需求,自己决定如何去处理异常)

  ThreadPool.QueueUserWorkItem((a) =>
            {
                while (true)
                {
                    if (MyExceptionAttribute.queueException.Count > 0)
                    {
                        Exception ex = MyExceptionAttribute.queueException.Dequeue();//出队
                        string fileName = DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
                        string start = DateTime.Now.ToString("HH:mm:ss") + "\r\n";
                        string end = "------------------------------------------------------------" + "\r\n";
                        File.AppendAllText(fileLogPath + fileName, start + "ErrorMsg:" + ex.ToString() + "\r\n" + end, System.Text.Encoding.Default);
                    }
                    else
                    {
                        Thread.Sleep(5000);//如果队列中没有数据,休息避免造成CPU的空转.
                    }
                }
            }, fileLogPath);

 

转载于:https://www.cnblogs.com/Akeke/p/7084920.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值