千家信息网

springmvc错误处理机制是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇"springmvc错误处理机制是什么"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这
千家信息网最后更新 2026年11月01日springmvc错误处理机制是什么

这篇"springmvc错误处理机制是什么"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"springmvc错误处理机制是什么"文章吧。

1、首先要在 golable 文件的 protected void Application_Start()


注册一个错误处理机制。

MVC中自带一个 过滤器

FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

这里面 我们看到这个过滤器

2、其实就是在 app_Start文件夹下面 的 FilterConfig.cs 文件

3、 打开FilterConfig.cs文件

就写了一个注册事件。我们看得到 这个是对错误处理机制

(当然 ,你们看到的是 HandleErrorAttribute 这个类)

4、所以你们可能觉得奇怪,我们来查看MyExceptionAttribut的定义看一下

继承了HandleErrorAttribute

这里我把这个类的代码贴一下


public class MyExceptionAttribute : HandleErrorAttribute     {         //  private static object obj = new object();         public static ConcurrentQueue ExceptionQueue = new ConcurrentQueue();//定义队列          ///          /// 在该方法中捕获异常。         ///          ///          public override void OnException(ExceptionContext filterContext)         {              base.OnException(filterContext);             Exception ex = filterContext.Exception;//捕获异常信息。             //将异常信息写到队列中。             ExceptionQueue.Enqueue(ex);             //跳转到错误页面.             filterContext.HttpContext.Response.Redirect("/Error.html");                      }     }

主要是定义一个静态 队列 ConcurrentQueue

(当然你也可以用 Queue。但是微软说 这个ConcurrentQueue 比 Queue 安全。好像是线程安全的,一堆堆的理论,说白了就是用ConcurrentQueue 更安全)

这样所有的错误就都在这个队列里面了。(就是内存)

这样总不行吧。内存 断电就没有了的啊。

所以我们要想把资料存到 硬盘中。

5、现在又要在

golable 文件的 protected void Application_Start()


中注册一个消费线程(这句话后面会解释,看不懂就继续)就是在 protected void Application_Start()中加入这些代码,***放最前面。

内容就是线程池开启一个线程 从刚刚定义的 MyExceptionAttribute的 ExceptionQueue队列里面取出项来。

将错误信息最加到文件后面。如果队列为空,就线程停留3秒。


string filePath = Server.MapPath("/Log/");             ThreadPool.QueueUserWorkItem((a) =>             {                  while (true)//注意:线程不能结束。后面写到队列中的数据没法处理。                 {      // 这里可以加一条   if (MyExceptionAttribute.ExceptionQueue.Count() > 0) //{  发送邮件到管理员}                     if (MyExceptionAttribute.ExceptionQueue.Count() > 0)                     {                         // Exception ex= MyExceptionAttribute.ExceptionQueue.Dequeue();//从队列中取出数据.                         Exception ex = null;                         bool isResult = MyExceptionAttribute.ExceptionQueue.TryDequeue(out ex);                         if (ex != null && isResult)                         {                             string fullPath = filePath + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";                             File.AppendAllText(fullPath, ex.ToString());                          //   ILog logger = LogManager.GetLogger("errorMsg");                           //  logger.Error(ex.ToString());                         }                         else                         {                             Thread.Sleep(3000);                         }                     }                     else                     {                         Thread.Sleep(3000);//避免造成CPU的空转。                     }                 }                 }, filePath);

6、总结。

这个就是一个生产者消费者的模式。

生产者就是 产生错误的源头。 消费者就是注册保存日志的方法。

中间有一个仓库就是 那个静态错误队列。

可以看到 系统产生的错误临时存放于内存中。然后一个新的线程 去读写静态错误队列。

正常情况 需要在错误队列里面加一个错误队列数字大于1000条的时候 发警告到邮箱的功能。那样感觉有点问题复杂化了,毕竟这里只是讲错误处理。

7、log4net 我前面讲过的一个开源框架 记录错误很好。

这里提供一个连接 log4net配置方法你可以把那个一起并到这里。那么就会有

把protected void Application_Start()中添加 的代码

改成。注意是改成:

log4net.Config.XmlConfigurator.Configure();             //开始一个线程,查看异常队列             string filePath = Server.MapPath("/Log/");             ThreadPool.QueueUserWorkItem((a) =>             {                  while (true)//注意:线程不能结束。后面写到队列中的数据没法处理。                 {                     if (MyExceptionAttribute.ExceptionQueue.Count() > 0)                     {                         // Exception ex= MyExceptionAttribute.ExceptionQueue.Dequeue();//从队列中取出数据.                         Exception ex = null;                         bool isResult = MyExceptionAttribute.ExceptionQueue.TryDequeue(out ex);                         if (ex != null && isResult)                         {                             string fullPath = filePath + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";                             //File.AppendAllText(fullPath, ex.ToString());                             ILog logger = LogManager.GetLogger("errorMsg");                             logger.Error(ex.ToString());                         }                         else                         {                             Thread.Sleep(3000);                         }                     }                     else                     {                         Thread.Sleep(3000);//避免造成CPU的空转。                     }                 }                 }, filePath);

这样就会按照你的要求把错误日志记录到

app_data文件夹下面。(前提是你有未处理的错误 。呵呵)

看到下图就成功了

以上就是关于"springmvc错误处理机制是什么"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

错误 队列 就是 处理 线程 文件 内容 机制 数据 安全 代码 信息 内存 方法 静态 消费 文件夹 文章 日志 消费者 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 喔噻互联网科技有限公司 麻工互联网科技 互联网金融公司科技 期待互联网科技 深圳天众互联网科技公司 互联网科技大会案例 西藏七维空间互联网科技有限公司 语蝶互联网科技有限公司 晓花互联网科技有限公司网址 恒生互联网科技指数跳水 烟台灵鸽互联网科技有限公司 无锡工业互联网科技有限公司 西安有哪些互联网高科技企业 国产互联网科技公司 易租星互联网科技有限公司 北京天晋互联网科技有限公司 山东蛋芒互联网科技有限公司 保山浩联互联网科技有限公司 广东猫王互联网科技有限公司电话 前海云享互联网科技 鑫亿盛互联网科技 致聘互联网科技 赫美联合互联网科技 广州恒生互联网科技有限 山东子淼互联网科技有限公司 广东工业互联网大赛深圳学泰科技 城市宝互联网科技有限公司 工业互联网科技创业 保山互联网科技靠谱吗 现代科技的标志之一的互联网
0