MVC4.0 利用HandleErrorAttribute和log4net实现记录异常日志功能
1.MVC4.0中HandleErrorAttribte已经帮我们处理了异常问题,当我们新建一个非空的MVC项目时候,在FilterConfig中会发现这样的代码
- public class FilterConfig
- {
- public static void RegisterGlobalFilters(GlobalFilterCollection filters)
- {
- filters.Add(new HandleErrorAttribute());
- }
- }
这时候,我们打开web.config中实现customerrors节点的配置,用户就看不到黄页了,将根据异常码,访问你指定的错误页面。
2.上面是为了解决用户体验问题,但是作为开发者,为了更好的维护站点,我们应该了解更多的异常信息,下面我们自定义一个异常类
- public class ExceptionHandlerAttribute : HandleErrorAttribute
- {
- public override void OnException(ExceptionContext filterContext)
- {
- base.OnException(filterContext);
- LogHelper.Error(filterContext.Exception.ToString());
- }
- }
接下来将我们自定义的属性注入到全局筛选器中,当项目发生异常的时候,会将异常发送到我们自定义的ExceptionHandlerAttribute中进行处理
- public class FilterConfig
- {
- public static void RegisterGlobalFilters(GlobalFilterCollection filters)
- {
- filters.Add(new HandleErrorAttribute());
- filters.Add(new ExceptionHandlerAttribute());
- }
- }
由于我们使用了log4net记录错误日志,所以我们还需要对log4net进行配置,首先在Application_Start()中初始化log4net的配置
- public class MvcApplication : 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);
- AuthConfig.RegisterAuth();
- LogHelper.LoadConfig(Server.MapPath("~/Config/log4net.config"));
- }
- }
根据自己的需求,配置log4net.config
- <?xml version="1.0"?>
- <configuration>
- <configSections>
- <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
- </configSections>
- <log4net>
- <!-- 日志文件部分log输出格式的设定 -->
- <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
- <!--最小锁定模型以允许多个进程可以写入同一个文件-->
- <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
- <file value="Logs\Log_" />
- <appendToFile value="true" />
- <rollingStyle value="Date" />
- <datePattern value="yyyyMMdd'.txt'" />
- <staticLogFileName value="false" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%newline%date %newline%message %newline" />
- </layout>
- <filter type="log4net.Filter.LevelRangeFilter">
- <param name="LevelMin" value="Error" />
- <param name="LevelMax" value="Error" />
- </filter>
- </appender>
- <root>
- <!--<level value="Error" />-->
- <appender-ref ref="RollingLogFileAppender" />
- </root>
- </log4net>
- </configuration>
下面是LogHelper类中的代码
- public class LogHelper
- {
- private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
- public static void LoadConfig(string path)
- {
- log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(path));
- }
- /// <summary>
- /// 错误信息
- /// </summary
- public static void Error(string error)
- {
- log.Error(error);
- }
- /// <summary>
- /// 致命信息
- /// </summary>
- public static void Fatal(string fatal)
- {
- log.Fatal(fatal);
- }
- /// <summary>
- /// 一般信息
- /// </summary>
- public static void Info(string info)
- {
- log.Info(info);
- }
- /// <summary>
- /// 警告信息
- /// </summary>
- public static void Warn(string warn)
- {
- log.Warn(warn);
- }
- }
MVC4.0 利用HandleErrorAttribute和log4net实现记录异常日志功能的更多相关文章
- MVC4.0 利用IActionFilter实现简单的后台操作日志功能
首先我们要了解MVC提供了4种常用的拦截器:IActionFilter(Action拦截器接口).IExceptionFilter(异常拦截器接口).IResultFilter(Result拦截器接口 ...
- MVC4.0 利用IActionFilter实现单一Action返回多种结果
延续MVC4.0 实现单一Action返回多种结果,我们实现了在一个Action中根据前台请求方式的不同和请求内容的不同返回了多个结果,但是这种返回多个结果的业务逻辑并不通用.如果现在年纪Action ...
- 在ASP.NET MVC中使用Log4Net记录异常日志,出错时导向到静态页
本篇体验在ASP.NET MVC 4中使用Log4Net记录日志. 通过NuGet安装Log4Net. 需求是:当出错时导向到Error.html静态页面,Log4Net记录错误信息. 大致的思路是: ...
- 点滴积累【C#】---使用log4net组件记录错误日志(以文本形式记录)
效果: 描述: 利用log4net组件进行错误日志的记录,log4net记录错误的方式我所了解的有4种,No.1 文本形式记录日志,No.2存储到数据库形式记录日志,No.3控制台控制显示日志,No. ...
- 转:使用log4net完成程序异常日志记录(使用SQLite数据库记录和普通文本记录)
http://www.cnblogs.com/kyo-yo/archive/2010/06/11/use-log4net-to-log-exception.html 在前端时间开发的时候由于需要将异常 ...
- 如何为Windows服务增加Log4net和EventLog的日志功能。
一.简介 最近在做一个项目的时候,需要该项目自动启动.自动运行,不需要认为干预.不用说,大家都知道用什么技术,那就是 Windows服务.在以前的Net Framework 平台下,Windows 服 ...
- 在 C# 控制台中记录异常日志并输出
最近做了一个小程序,要求在控制台中记录程序运行的异常并输出到指定的文件夹中,以下是我的具体的程序代码: public static void ErrorLog(Exception ex) { stri ...
- AspNetCore 使用log4net+IExceptionFilter 记录错误日志
错误日志的好处我就不说了,大家都心里有数,那今天浩子就给大家说一说基本的错误日志吧这次通过log4net记录日志. 原来写过一个关于Nlog的日志框架,传送门为:https://www.cnblogs ...
- MVC中使用过滤器记录异常日志
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Filte ...
随机推荐
- 简单的TCPIP 客户端 服务器
// soClient.cpp : Defines the entry point for the console application. // #include "stdafx.h&qu ...
- java事务管理
一.什么是Java事务 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性(isol ...
- PC上安装MAC X Lion
PC上安装MACXLion 网上关于如何在PC下安装MAC的文章已近不少了,但对于一些初学者在实践当中会遇到各种问题,以下视频资料为大家展示两种虚拟机安装MacOS. 1.VmwareWorkstat ...
- c#实现每隔规定时间自动执行程序代码
c#实现每隔规定时间自动执行程序代码 在一般的项目中我们很少用到c#实现每隔规定时间自动执行程序代码,但是如果你经历的项目多,或者应用程序做的比较多的话,c#实现每隔规定时间自动执行程序代码就用的比 ...
- java 个人总结
每周课程总结链接: 第一周 第二周 第三周 第四周 第五周 第六周 第七周 第八周 第九周 第十周 java实验报告链接: 实验一 实验二 实验三 实验四 实验五 代码托管链接 课程收获: 学习任何语 ...
- 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 ...
- Unieap3.5Java端通过SQL语句直接查询DataStore
通过sql查询dataStore 例子见 /mcss/src/com/neusoft/mcss/base/todo/dao/WorkTodoDaoImpl.java getWorksTodo() ID ...
- HTML 表单总结http://images2015.cnblogs.com/blog/1001203/201607/1001203-20160730200559841-2144892373.png
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- json传参应用
json传参应用 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言.易于人阅 ...
- MVC5 Identity 用用户名登录而不用电子邮件
1.修改AccountViewModels ·修改RegisterViewModel public class RegisterViewModel { [Required] [Display(Name ...