说明:异常处理

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. JavaSE学习总结(二)——Java语言基础

    一.Java程序预览 Java的语法与C非常类似,这里先使用几个非常简单的程序以点带面来区分C语Java的区分再细讲每个知识点.该文仅针对有编程基础的朋友参考. 1.1.Hello World 创建j ...

  2. python---cookie模拟登陆和模拟session原理

    cookie模拟登陆: import tornado.web class IndexHandler(tornado.web.RequestHandler): def get(self): #self. ...

  3. Oracle记录-开启与关闭数据库

    1.配置tnsnames.ora/listener.ora #cd /usr/oracle/oracle/product/11.2.0/db_1/network/admin ---切换到安装目录 #v ...

  4. POJ - 1426 Find The Multiple(搜索+数论)

    转载自:優YoU  http://user.qzone.qq.com/289065406/blog/1303946967 以下内容属于以上这位dalao http://poj.org/problem? ...

  5. Jena搭建SPARQL查询RDF数据

    1 Jena搭建SPARQL查询RDF数据 1.1 Jena概要 · SPARQL是W3C的RDF数据工作组设计的一种查询语言和协议,用于RDF数据的查询.经过类似于JDK安装时候的配置,可以在命令行 ...

  6. centos7安装telnet

    yum list |grep telnet yum install telnet.x86_64 安装后再测试

  7. B树学习总结

    1,B树的基本介绍 ①B树,相比于二叉树.红黑树而言,它的特点就是树的高度比其他类型的树要低很多.如何做到低呢?B树中的每个结点的分支数目非常大,即每个结点有很多很多孩子结点.这样,在相同结点数目情况 ...

  8. Python官方操作Excel文档

    xlwt 1.3.0 Downloads ↓ Library to create spreadsheet files compatible with MS Excel 97/2000/XP/2003 ...

  9. EasyUI Combobox 设置默认值

    /** *绑定运营商,设置默认值, 显示CMCC, 传值1 */ $('#operatingId').combobox({ url:'data_url', valueField:'id', textF ...

  10. UE4中Bebavior Tree中Delay及其后面代码失效的原因

    具体原因是因为节点的执行过程中,该节点及其父节点的Decorator条件不满足,而节点又受到flow control的影响,导致中途强制结束了Task节点的执行,具体如下. UE4中的Behavior ...