zoukankan      html  css  js  c++  java
  • MVC项目中异常处理

    一、异常处理,目的是为了不把一些数据相关的报错信息展示给用户

    1.在models中新建一个MyExceptionAttribute类,用来处理异常,并且将异常加载进入队列中

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading;
    using System.Web;
    using System.Web.Mvc;
    namespace Models
    {
        public class MyExceptionAttribute : HandleErrorAttribute
        {
        //新建一个队列Queue类型,用来存放异常信息,队列的原则是先进先出
    public static Queue<Exception> ExecptionQueue = new Queue<Exception>(); /// <summary> /// 可以捕获异常数据 /// </summary> /// <param name="filterContext"></param> public override void OnException(ExceptionContext filterContext) { //捕获异常 base.OnException(filterContext); //接收异常 Exception ex = filterContext.Exception; //写到队列,把数据插入到队列中 ExecptionQueue.Enqueue(ex); //跳转到错误页面. filterContext.HttpContext.Response.Redirect("/Error.html"); } } }

    2. 在Global.asax文件中开启线程,捕获异常,因为该文件是最初启动的,并且线程一直启动。然后将启动的线程日志放在log文件夹中。15行以后是关键代码

     // 注意: 有关启用 IIS6 或 IIS7 经典模式的说明,
        // 请访问 http://go.microsoft.com/?LinkId=9394801
    
        public class MvcApplication : SpringMvcApplication //System.Web.HttpApplication
        {
            //该文件只要文件启动就会自动启动,所以需要把处理异常的线程放置在该文件中
            protected void Application_Start()
            {
                log4net.Config.XmlConfigurator.Configure();//读取了配置文件中关于Log4Net配置信息.
                IndexManager.GetInstance().StartThread();//开始线程扫描LuceneNet对应的数据队列。
    
                AreaRegistration.RegisterAllAreas();
    
                WebApiConfig.Register(GlobalConfiguration.Configuration);
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
                //开启一个线程,扫描异常信息队列。
                //Server.MapPath  拿到一个文件夹的物理路径
                string filePath = Server.MapPath("/Log/");
                //开启线程池           需要传递一个匿名函数,需要传递一个方法:值执行线程的方法或者函数
                ThreadPool.QueueUserWorkItem((a) => {
                    while (true)    //设置线程一直在执行,从开启到结束
                    {
                        //判断一下队列中是否有数据
                        if (MyExceptionAttribute.ExecptionQueue.Count() > 0)
                        {
                            //            出队,并且用一个异常类型的去接收该值
                            Exception ex=MyExceptionAttribute.ExecptionQueue.Dequeue();
                            if (ex != null)
                            {
                                //将异常信息写到日志文件中。
                                //string fileName = DateTime.Now.ToString("yyyy-MM-dd");   //新建一个文件名
                                    //向文件中添加文件       文件名,数据,编码格式
                                //File.AppendAllText(filePath+fileName+".txt",ex.ToString(),System.Text.Encoding.UTF8);
                                ILog logger = LogManager.GetLogger("errorMsg");
                                logger.Error(ex.ToString());
                            }
                            else
                            {
                                //如果队列中没有数据,休息
                                Thread.Sleep(3000);
                            }
                        }
                        else
                        {
                            //如果队列中没有数据,休息
                            Thread.Sleep(3000);
                        }
                    }
                },filePath);
            }
           //异常处理的过滤器。
        }

    3. 关键点,修改App_Start文件夹下的FilterConfig文件

     public class FilterConfig
        {
            public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
               // filters.Add(new HandleErrorAttribute());
                filters.Add(new MyExceptionAttribute()); //注册自己的异常文件
            }
        }
  • 相关阅读:
    selenium基础--登录简单的网站
    git stash 用法总结和注意点
    爬取网易云超过十万的歌曲
    selenium自动化爬虫测试
    解决selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in P
    抓取网易云音乐的评论
    解释Crypto模块怎么就这么"皮"?No module named "Crypto"
    Windows系统下在Eclipse中集成Python
    bash 判断两个文件相等的代码
    Cassandra学习笔记
  • 原文地址:https://www.cnblogs.com/wangjinya/p/10904403.html
Copyright © 2011-2022 走看看