首页 > 扩展 > MVC > 正文

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

2024-09-06 20:44:35
字体:
来源:转载
供稿:网友

在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 name="filterContext"></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 name="filterContext"></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节点完成具体配置。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表