ASP.NET MVC使用Log4Net记录异常日志并跳转到静态页
本篇体验在ASP.NET MVC 4中使用Log4Net记录日志。
通过NuGet安装Log4Net。

需求是:当出错时导向到Error.html静态页面,Log4Net记录错误信息。
大致的思路是:
1、写一个记录日志的接口
2、实现记录日志接口的类,用Log4Net的API实现
3、在Web.config中配置Log4Net
4、在Global.asax中注册Log4Net
5、自定义一个出错页,以便在出错时导向到该静态页面
6、ASP.NET MVC默认的异常过滤器是HandleErrorAttribute,我们需要自定义一个继承HandleErrorAttribute的过滤器,并把自定义的过滤器注册到全局过滤器中去
首先定义一个记录日志的接口。
    public interface ILoggerService    {void Info(string message);void Warn(string message);void Debug(string message);void Error(string message);void Error(Exception ex);void Fatal(string message);void Fatal(Exception ex);     }实现ILoggerService,使用用Log4Net的API实现。
    public class LogHelper : ILoggerService    { private ILog _logger; public LogHelper() {    _logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);}public void Info(string message) {    _logger.Info(message);}public void Warn(string message) {    _logger.Warn(message);}public void Debug(string message) {    _logger.Debug(message);}public void Error(string message) {    _logger.Error(message);}public void Error(Exception ex) {    _logger.Error(ex.Message, ex);}public void Fatal(string message) {    _logger.Fatal(message);}public void Fatal(Exception ex) {    _logger.Fatal(ex.Message, ex);}    }在Web.config中配置Log4Net。
<configuration>  <configSections>    ......    <!--日志的配置-->    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4Net" />  </configSections>   ......  <!--日志的配置开始-->  <log4net>    <root>      <level value="ALL" />      <appender-ref ref="SysAppender" />    </root>    <logger name="WebLogger">      <!--配置日志的级别,低于此级别的就不写到日志里面去-->      <level value="DEBUG" />    </logger>    <!--系统日志的格式-->    <appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net">      <param name="File" value="App_Data/" />      <param name="AppendToFile" value="true" />      <param name="RollingStyle" value="Date" />      <param name="DatePattern" value=""Logs_"yyyyMMdd".txt"" />      <param name="StaticLogFileName" value="false" />      <layout type="log4net.Layout.PatternLayout,log4net"><!--<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />-->      <conversionPattern value="{%level}%date{MM/dd HH:mm:ss} - %message%newline%newline"/>      </layout>    </appender>    <!--控制台日志的格式-->    <appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net">           <layout type="log4net.Layout.PatternLayout,log4net"><param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />      </layout>    </appender>  </log4net>  <!--日志的配置结束--></configuration>在全局文件Global.asax中注册Log4Net。
    public class MvcApplication : System.Web.HttpApplication    {protected void Application_Start(){    AreaRegistration.RegisterAllAreas();    ......    //读取日志  如果使用log4net,应用程序一开始的时候,都要进行初始化配置    log4net.Config.XmlConfigurator.Configure();}    }ASP.NET MVC默认的异常过滤器是HandleErrorAttribute,我们需要自定义,继承该类。
    public class MyHandleExceptionAttribute : HandleErrorAttribute    {public override void OnException(ExceptionContext filterContext){    base.OnException(filterContext);    var log  = new LogHelper();    log.Error("被系统过滤捕获的异常" + filterContext.Exception);    filterContext.HttpContext.Response.Redirect("/Error.html");}    }自定义的异常过滤器当让要注册到全局过滤器中去。打开App_Start文件夹中的FilterConfig类,修改如下:
    public class FilterConfig    {public static void RegisterGlobalFilters(GlobalFilterCollection filters){    //filters.Add(new HandleErrorAttribute());    filters.Add(new MyHandleExceptionAttribute());}    }在HomeController中故意留一个错误。
    public class HomeController : Controller    {public ActionResult Index(){    int a = 10;    int b = 0;    var result = a/b;    return View();}    }在项目根文件夹下顶一个Error.html静态文件,用来呈现错误提示信息。
当浏览器请求Home/Index视图,导向到Error.html出错页,Log4Net自动为我们在App_Data目录下记录了异常信息。
到此这篇关于ASP.NET MVC使用Log4Net记录异常日志并跳转到静态页的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。
相关文章:
1. 使用EF Code First搭建简易ASP.NET MVC网站并允许数据库迁移2. ASP.NET MVC使用Quartz.NET执行定时任务3. ASP.NET MVC使用Identity增删改查用户4. log4net在Asp.net MVC4中的使用过程5. ASP.NET MVC实现树形导航菜单6. ASP.NET MVC使用Boostrap实现产品展示、查询、排序、分页7. ASP.NET MVC使用异步Action的方法8. ASP.NET MVC获取多级类别组合下的产品9. ASP.NET MVC使用JSAjaxFileUploader插件实现单文件上传10. ASP.NET MVC实现下拉框多选

网公网安备