MVC如何使用Log4Net进行错误日志记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVC如何使用Log4Net进行错误日志记录相关的知识,希望对你有一定的参考价值。

参考技术A

  在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 ///

  /// 重写OnException方法来捕获异常数据 ///

  ///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 QueueExceptions=new Queue(); ///

  /// 重写OnException方法来捕获异常数据 ///

  ///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节点完成具体配置。

  ...

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

  <"1.0"?>

  在Global文件中的Application_Start方法中开启一个线程,用于将队列中的错误信息写入日志文件。

  using System.Linq;using System.Threading;using System.Web.Http;using System.Web.Mvc;using System.Web.Optimization;using System.Web.Routing;using log4net;using PMS.WebApp.Models;using Spring.Web.Mvc;namespace PMS.WebApp // 注意: 有关启用 IIS6 或 IIS7 经典模式的说明, // 请访问 http://go.microsoft.com/?LinkId=9394801 public class MvcApplication : SpringMvcApplication//HttpApplication protected void Application_Start() log4net.Config.XmlConfigurator.Configure();//读取Log4Net配置信息 AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); //开启一个线程,扫描异常信息队列. var filePath = Server.MapPath("/Log/"); ThreadPool.QueueUserWorkItem((a) => while (true) //判断队列中是否有数据 if (Log4ExceptionAttribute.Exceptions.Any()) //出队一条异常信息 var ex = Log4ExceptionAttribute.Exceptions.Dequeue(); //若异常信息不为空 if (ex == null) continue; //将异常信息写入到日志文件中 var logger = LogManager.GetLogger("errorMsg"); logger.Error(ex.ToString()); else //若异常信息队列为空,则线程休息三秒 Thread.Sleep(3000); , filePath);

  成功完成错误日志的配置。

   以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是关于MVC如何使用Log4Net进行错误日志记录的主要内容,如果未能解决你的问题,请参考以下文章

日志文本记录

如何使用 Log4net 进行日志记录?

Asp.net MVC企业级开发(02)---Log4net

log4net使用详解

转:log4net使用详解

使用 Vala 进行日志记录