1.MVC4.0中HandleErrorAttribte已经帮我们处理了异常问题,当我们新建一个非空的MVC项目时候,在FilterConfig中会发现这样的代码

  1. public class FilterConfig
  2. {
  3. public static void RegisterGlobalFilters(GlobalFilterCollection filters)
  4. {
  5. filters.Add(new HandleErrorAttribute());
  6. }
  7. }

这时候,我们打开web.config中实现customerrors节点的配置,用户就看不到黄页了,将根据异常码,访问你指定的错误页面。

2.上面是为了解决用户体验问题,但是作为开发者,为了更好的维护站点,我们应该了解更多的异常信息,下面我们自定义一个异常类

  1. public class ExceptionHandlerAttribute : HandleErrorAttribute
  2. {
  3. public override void OnException(ExceptionContext filterContext)
  4. {
  5. base.OnException(filterContext);
  6.  
  7. LogHelper.Error(filterContext.Exception.ToString());
  8. }
  9. }

接下来将我们自定义的属性注入到全局筛选器中,当项目发生异常的时候,会将异常发送到我们自定义的ExceptionHandlerAttribute中进行处理

  1. public class FilterConfig
  2. {
  3. public static void RegisterGlobalFilters(GlobalFilterCollection filters)
  4. {
  5. filters.Add(new HandleErrorAttribute());
  6. filters.Add(new ExceptionHandlerAttribute());
  7. }
  8. }

由于我们使用了log4net记录错误日志,所以我们还需要对log4net进行配置,首先在Application_Start()中初始化log4net的配置

  1. public class MvcApplication : System.Web.HttpApplication
  2. {
  3. protected void Application_Start()
  4. {
  5. AreaRegistration.RegisterAllAreas();
  6.  
  7. WebApiConfig.Register(GlobalConfiguration.Configuration);
  8. FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  9. RouteConfig.RegisterRoutes(RouteTable.Routes);
  10. BundleConfig.RegisterBundles(BundleTable.Bundles);
  11. AuthConfig.RegisterAuth();
  12.  
  13. LogHelper.LoadConfig(Server.MapPath("~/Config/log4net.config"));
  14. }
  15. }

根据自己的需求,配置log4net.config

  1. <?xml version="1.0"?>
  2. <configuration>
  3. <configSections>
  4. <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  5. </configSections>
  6.  
  7. <log4net>
  8. <!-- 日志文件部分log输出格式的设定 -->
  9. <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  10. <!--最小锁定模型以允许多个进程可以写入同一个文件-->
  11. <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
  12. <file value="Logs\Log_" />
  13. <appendToFile value="true" />
  14. <rollingStyle value="Date" />
  15. <datePattern value="yyyyMMdd'.txt'" />
  16. <staticLogFileName value="false" />
  17. <layout type="log4net.Layout.PatternLayout">
  18. <conversionPattern value="%newline%date %newline%message %newline" />
  19. </layout>
  20. <filter type="log4net.Filter.LevelRangeFilter">
  21. <param name="LevelMin" value="Error" />
  22. <param name="LevelMax" value="Error" />
  23. </filter>
  24. </appender>
  25.  
  26. <root>
  27. <!--<level value="Error" />-->
  28. <appender-ref ref="RollingLogFileAppender" />
  29. </root>
  30. </log4net>
  31. </configuration>

下面是LogHelper类中的代码

  1. public class LogHelper
  2. {
  3. private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  4.  
  5. public static void LoadConfig(string path)
  6. {
  7. log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(path));
  8. }
  9.  
  10. /// <summary>
  11. /// 错误信息
  12. /// </summary
  13. public static void Error(string error)
  14. {
  15. log.Error(error);
  16. }
  17.  
  18. /// <summary>
  19. /// 致命信息
  20. /// </summary>
  21. public static void Fatal(string fatal)
  22. {
  23. log.Fatal(fatal);
  24. }
  25.  
  26. /// <summary>
  27. /// 一般信息
  28. /// </summary>
  29. public static void Info(string info)
  30. {
  31. log.Info(info);
  32. }
  33.  
  34. /// <summary>
  35. /// 警告信息
  36. /// </summary>
  37. public static void Warn(string warn)
  38. {
  39. log.Warn(warn);
  40. }
  41. }

MVC4.0 利用HandleErrorAttribute和log4net实现记录异常日志功能的更多相关文章

  1. MVC4.0 利用IActionFilter实现简单的后台操作日志功能

    首先我们要了解MVC提供了4种常用的拦截器:IActionFilter(Action拦截器接口).IExceptionFilter(异常拦截器接口).IResultFilter(Result拦截器接口 ...

  2. MVC4.0 利用IActionFilter实现单一Action返回多种结果

    延续MVC4.0 实现单一Action返回多种结果,我们实现了在一个Action中根据前台请求方式的不同和请求内容的不同返回了多个结果,但是这种返回多个结果的业务逻辑并不通用.如果现在年纪Action ...

  3. 在ASP.NET MVC中使用Log4Net记录异常日志,出错时导向到静态页

    本篇体验在ASP.NET MVC 4中使用Log4Net记录日志. 通过NuGet安装Log4Net. 需求是:当出错时导向到Error.html静态页面,Log4Net记录错误信息. 大致的思路是: ...

  4. 点滴积累【C#】---使用log4net组件记录错误日志(以文本形式记录)

    效果: 描述: 利用log4net组件进行错误日志的记录,log4net记录错误的方式我所了解的有4种,No.1 文本形式记录日志,No.2存储到数据库形式记录日志,No.3控制台控制显示日志,No. ...

  5. 转:使用log4net完成程序异常日志记录(使用SQLite数据库记录和普通文本记录)

    http://www.cnblogs.com/kyo-yo/archive/2010/06/11/use-log4net-to-log-exception.html 在前端时间开发的时候由于需要将异常 ...

  6. 如何为Windows服务增加Log4net和EventLog的日志功能。

    一.简介 最近在做一个项目的时候,需要该项目自动启动.自动运行,不需要认为干预.不用说,大家都知道用什么技术,那就是 Windows服务.在以前的Net Framework 平台下,Windows 服 ...

  7. 在 C# 控制台中记录异常日志并输出

    最近做了一个小程序,要求在控制台中记录程序运行的异常并输出到指定的文件夹中,以下是我的具体的程序代码: public static void ErrorLog(Exception ex) { stri ...

  8. AspNetCore 使用log4net+IExceptionFilter 记录错误日志

    错误日志的好处我就不说了,大家都心里有数,那今天浩子就给大家说一说基本的错误日志吧这次通过log4net记录日志. 原来写过一个关于Nlog的日志框架,传送门为:https://www.cnblogs ...

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

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

随机推荐

  1. 简单的TCPIP 客户端 服务器

    // soClient.cpp : Defines the entry point for the console application. // #include "stdafx.h&qu ...

  2. java事务管理

    一.什么是Java事务 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性(isol ...

  3. PC上安装MAC X Lion

    PC上安装MACXLion 网上关于如何在PC下安装MAC的文章已近不少了,但对于一些初学者在实践当中会遇到各种问题,以下视频资料为大家展示两种虚拟机安装MacOS. 1.VmwareWorkstat ...

  4. c#实现每隔规定时间自动执行程序代码

    c#实现每隔规定时间自动执行程序代码  在一般的项目中我们很少用到c#实现每隔规定时间自动执行程序代码,但是如果你经历的项目多,或者应用程序做的比较多的话,c#实现每隔规定时间自动执行程序代码就用的比 ...

  5. java 个人总结

    每周课程总结链接: 第一周 第二周 第三周 第四周 第五周 第六周 第七周 第八周 第九周 第十周 java实验报告链接: 实验一 实验二 实验三 实验四 实验五 代码托管链接 课程收获: 学习任何语 ...

  6. Can Live View boot up images acquired from 64bit OS evidence?

    Some said Live View could only boot up images acquired from 32bit OS evidence. I have to say that it ...

  7. Unieap3.5Java端通过SQL语句直接查询DataStore

    通过sql查询dataStore 例子见 /mcss/src/com/neusoft/mcss/base/todo/dao/WorkTodoDaoImpl.java getWorksTodo() ID ...

  8. HTML 表单总结http://images2015.cnblogs.com/blog/1001203/201607/1001203-20160730200559841-2144892373.png

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. json传参应用

    json传参应用 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言.易于人阅 ...

  10. MVC5 Identity 用用户名登录而不用电子邮件

    1.修改AccountViewModels ·修改RegisterViewModel public class RegisterViewModel { [Required] [Display(Name ...