说明:异常处理

1.1 在WebApp的Model中 添加异常处理类 继承于HandleErrorAttribute

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace BBFJ.OA.WebApp.Models
{
public class MyExceptionAttribute:HandleErrorAttribute
{
public static Queue<Exception> ExceptionQueue = new Queue<Exception>();
/// <summary>
/// 捕获异常信息
/// 别忘了在在异常处理过滤器中注册一下
/// </summary>
/// <param name="filterContext"></param>
public override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
//捕获异常信息
Exception ex = filterContext.Exception;
//写到日志时,多个线程同时访问,会造成并发,形成死锁===>写入队列
ExceptionQueue.Enqueue(ex);
//跳转到错误页
filterContext.HttpContext.Response.Redirect("/Error.html");
}
}
}

MyExceptionAttribute

1.2 在WebApp下App_Start的FilterConfig异常处理过滤器中注册一下

using BBFJ.OA.WebApp.Models;
using System.Web;
using System.Web.Mvc; namespace BBFJ.OA.WebApp
{
public class FilterConfig
{
//在异常处理过滤器中注册一下
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new MyExceptionAttribute());
}
}
}

RegisterGlobalFilters

1.3 在WebApp中添加错误页面Error.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
服务器忙,5秒钟后跳转到首页!
</body>
</html>

1.4 在Global文件中开启线程

using BBFJ.OA.WebApp.Models;
using Spring.Web.Mvc;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing; namespace BBFJ.OA.WebApp
{
// 注意: 有关启用 IIS6 或 IIS7 经典模式的说明,
// 请访问 http://go.microsoft.com/?LinkId=9394801 //SpringMvcApplication继承了System.Web.HttpApplication
//通过SpringMvcApplication中的ConfigureApplicationContext();方法,读取配置文件创建IHttpApplication容器
public class MvcApplication : SpringMvcApplication //System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//开启线程,扫描异常
//建立日志文件夹,拿到物理路径
string filePath = Server.MapPath("/Log/");
//线程池中取线程
ThreadPool.QueueUserWorkItem((a) => {
while (true)
{
//检查异常队列中是否有数据
if (MyExceptionAttribute.ExceptionQueue.Count() > )
{
Exception ex= MyExceptionAttribute.ExceptionQueue.Dequeue();
if (ex != null)
{
//将异常写入日志文件
//文件名
string fileName = DateTime.Now.ToString("yyyy-MM-dd");
File.AppendAllText(filePath+fileName+".txt",ex.ToString(),System.Text.Encoding.UTF8);
}
else
{
Thread.Sleep();
}
}
else
{
//很重要,如果队列中没有数据休息一会
Thread.Sleep();
}
}
}, filePath);
}
}
}

1.5 在WebApp下建立日志文件夹

1.6 创建测试控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace BBFJ.OA.WebApp.Controllers
{
public class TestController : Controller
{
//
// GET: /Test/ public ActionResult Index()
{
return View();
}
public ActionResult ShowResult()
{
int a = ;
int b = ;
int c = a / b;
return Content(c.ToString());
}
}
}

TestController

运行结果

  日志信息:

mvc中简单的异常记录的更多相关文章

  1. [.Net Core] 在 Mvc 中简单使用日志组件

    在 Mvc 中简单使用日志组件 基于 .Net Core 2.0,本文只是蜻蜓点水,并非深入浅出. 目录 使用内置的日志组件 简单过渡到第三方组件 - NLog 使用内置的日志 下面使用控制器 Hom ...

  2. ASP.NET MVC中错误日志信息记录

    MVC中有一个处理异常的过滤器 HandleErrorAttribute 1.新建一个类继承自 HandleErrorAttribute,然后重写OnException这个方法 public clas ...

  3. 【转】ASP.NET MVC中错误日志信息记录

    MVC中有一个处理异常的过滤器 HandleErrorAttribute 1.新建一个类继承自 HandleErrorAttribute,然后重写OnException这个方法 public clas ...

  4. 在MVC中使用NHibernate学习记录

    NHibernate简介: NHibernate是一个面向.net环境的对象/关系数据库映射工具,对象/关系数据库映射(object/relational mapping,ORM)是一种技术,可以将对 ...

  5. ASP.NET MVC中简单使用Autofac

    项目中引入Autofac的目的是为了实现控制反转,即IoC,Inversion of Control.控制反转可以有效的降低类之间的相互依赖关系,增加架构的弹性,降低软件复杂度. 示例代码: IPro ...

  6. MVC中Filter拦截问题记录之重定向陷阱

    出错环境:被拦截的页面中使用了未实例化的对象,比如只有登录后才有的UserInfor对象. 理想中:浏览器请求页面时,会被Filter拦截,然后重定向到指定页面: 实际现象:将断点打入Filter中, ...

  7. Java中简单提示异常代码的行号,类名等

    public class Test1 { public static void main(String args[]) { System.out.println(getLineInfo()); get ...

  8. MVC教程九:异常过滤器

    我们平常在程序里面为了捕获异常,会加上try-catch-finally代码,但是这样会使得程序代码看起来很庞大,在MVC中我们可以使用异常过滤器来捕获程序中的异常,如下图所示: 使用了异常过滤器以后 ...

  9. MVC中使用过滤器记录异常日志

    using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Filte ...

随机推荐

  1. python自动化运维之路~DAY6

    python自动化运维之路~DAY6 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  如果你想开发一款游戏,会存在角色的混搭的情况,这个时候“面向对象过程”就出现了,他能轻松的解决 ...

  2. JS控制CSS3,添加浏览器兼容前缀

    不同浏览器对于有些css3属性名字定义的时候,会带上特有的前缀,所以在css编写的时候,经常会一个属性写多个不同的前缀进行兼容.比如: div { transform: rotate(30deg); ...

  3. Java编程思想 学习笔记12

    十二.通过异常处理错误  Java的基本理念是“结构不佳的代码不能运行”. Java中的异常处理的目的在于通过使用少于目前数量的代码来简化大型.可靠的程序的生成,并且通过这种方式可以使你更加自信:你的 ...

  4. ps知识集锦

    1.工具箱   移动工具 [V]矩形.椭圆选框工具 [M]套索.多边形套索.磁性套索 [L]快速选择工具.魔棒工具 [W] 裁剪.透视裁剪.切片.切片选择工具 [C]吸管.颜色取样器.标尺.注释.12 ...

  5. MQTT协议-MQTT协议解析(MQTT数据包结构)

    协议就是通信双方的一个约定,即,表示第1位传输的什么.第2位传输的什么…….在MQTT协议中,一个MQTT数据包由:固定头(Fixed header). 可变头(Variable header). 消 ...

  6. The connection to adb is down, and a severe error has occured(Android模拟器端口被占用)

    相信不少同学和我一样遇到这个问题,有时候搞的还要重启电脑,那究竟是什么原因导致的呢,很明显,你的端口被占用了,那下面给出终极解决方案 一.首先描述症状,如下图 二.出现问题了,首先确定你的sdk目录是 ...

  7. C - Least Crucial Node

    题目链接:https://cn.vjudge.net/contest/247936#problem/C 具体大意:给你起点和中点,总点数,边数.求到终点的最小割点. 具体思路:可以用tarjan算法来 ...

  8. JavaScript客户端签名直传OSS

    参考链接: https://help.aliyun.com/document_detail/31925.html?spm=5176.11065259.1996646101.searchclickres ...

  9. Struts自定义拦截器&拦截器工作原理

    0.拦截器的调用原理: 拦截器是一个继承了序列化接口的普通接口.其工作原理是讲需要被拦截的对象作为参数传到intercept()方法内,在方法内部对此对象进行处理之后再执行原方法.intercept( ...

  10. C++中构造函数和析构函数的调用顺序

    一般而言,析构函数调用的顺序和构造函数调用顺序相反,但是,对象的存储类别可以改变调用析构函数的顺序.举例说明: CreateAndDestroy类的定义 CreateAndDestroy类的成员函数的 ...