MVC使用Log4Net进行错误日志记录学习笔记4

在Web应用运行过程中,我们难免会遇到程序运行异常,这个时候我们就应该将异常信息记录下来,以便开发人员和维护人员对异常原因进行还原,对异常原因进行修复。在ASP.NET平台中进行日志记录的组件也有很多,如Log4Net、CommonLogging等,我们这里选用Log4Net进行异常日志的记录。

1. 捕获异常

在ASP.NET MVC中提供了一个全局的异常处理过滤器:HandleErrorAttribute,可以通过该过滤器捕获异常信息。

我们在Models文件夹下新建类型Log4ExceptionAttribute,继承HandleErrorAttribute类,同时重写OnException方法来捕获异常数据:          

using System.Web.Mvc; namespace PMS.WebApp.Models { public class Log4ExceptionAttribute:HandleErrorAttribute { /// <summary> /// 重写OnException方法来捕获异常数据 /// </summary> /// <param></param> public override void OnException(ExceptionContext filterContext) { base.OnException(filterContext); //捕获当前异常数据 var ex = filterContext.Exception; } } }

新建过滤器后我们还需要在Global文件中调用的RegisterGlobalFilters方法中完成自己定义异常处理过滤的注册。

using System.Web.Mvc; using PMS.WebApp.Models; namespace PMS.WebApp { public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { //filters.Add(new HandleErrorAttribute()); filters.Add(new Log4ExceptionAttribute()); } } }

2. 考虑到多用户并发操作时可能产生的问题,我们需要新建一个队列来进行异常信息的暂存,同时开辟一个线程专门对队列中的异常信息进行处理。

在Log4ExceptionAttribute类中新建一个静态的异常类型的队列,在发生异常后,程序自动触发OnException方法,方法中将当前的异常信息入队后,跳转到错误页面。

using System; using System.Collections.Generic; using System.Web.Mvc; namespace PMS.WebApp.Models { public class Log4ExceptionAttribute:HandleErrorAttribute { public static Queue<Exception> Exceptions=new Queue<Exception>(); /// <summary> /// 重写OnException方法来捕获异常数据 /// </summary> /// <param></param> public override void OnException(ExceptionContext filterContext) { base.OnException(filterContext); //捕获当前异常数据 var ex = filterContext.Exception; //将异常数据入队 Exceptions.Enqueue(ex); //跳转到错误页面 filterContext.HttpContext.Response.Redirect("/Error.html"); } } }

Log4Net的配置是在应用程序配置文件中进行的,我们先在配置文件中进行Log4Net的配置。Log4Net需要配置的节点位置和SpringNet完全相同,首先需要在configSessions中新增子节点,然后在configuration节点中增加log4net节点完成具体配置。

<configuration> <configSections> <section type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <!-- For more information on Entity Framework configuration, visit ?LinkID=237468 --> <!--↓Log4Net配置↓--> <section type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> <!--↑Log4Net配置↑--> <!--↓Spring.Net配置↓--> <sectionGroup> <section type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4"/> </sectionGroup> <!--↑Spring.Net配置↑--> </configSections> <!--↓Spring.Net配置↓--> <spring> <context> <resource uri="file://~/Config/controllers.xml"/> <resource uri="file://~/Config/services.xml"/> </context> </spring> <!--↑Spring.Net配置↑--> <!--↓Log4Net配置↓--> <log4net> <!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL --> <!-- Set root logger level to ERROR and its appenders --> <root> <level value="ALL"/> <appender-ref ref="SysAppender"/> </root> <!-- Print only messages of level DEBUG or above in the packages --> <logger> <level value="DEBUG"/> </logger> <appender type="log4net.Appender.RollingFileAppender,log4net" > <param value="App_Data/" /> <param value="true" /> <param value="Date" /> <param value="&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;" /> <param value="false" /> <layout type="log4net.Layout.PatternLayout,log4net"> <param value="%d [%t] %-5p %c - %m%n" /> <param value="&#13;&#10;----------------------header--------------------------&#13;&#10;" /> <param value="&#13;&#10;----------------------footer--------------------------&#13;&#10;" /> </layout> </appender> <appender type="log4net.Appender.ConsoleAppender,log4net"> <layout type="log4net.Layout.PatternLayout,log4net"> <param value="%d [%t] %-5p %c - %m%n" /> </layout> </appender> </log4net> <!--↑Log4Net配置↑--> ... </configuration>

在配置文件中可以对日志记录的信息、格式、文件名等作出具体的配置,下面是配置信息的详解

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjydwj.html