在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记录异常日志,出错时导向到静态页的更多相关文章
- asp.net mvc中加入log4net记录错误日志
直接上代码示例:https://share.weiyun.com/aff36f2547514cfefe129ebb8ccb28ef 首先添加加log4net的dll,推荐用nuget.... 贴上配置 ...
- MVC中使用过滤器记录异常日志
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Filte ...
- MVC 中使用log4net 打印重复日志解决方法
最近在项目中引用log4net 来打印日志,会发现在同一时间点 打印重复记录: 详见图
- ASP.NET MVC学习之Log4Net配置(日志记录)
Log4Net配置笔记---- 首先,添加对log4net.dll的引用. 在Web.config文件下的Configuration节点下添加Log4Net的配置信息: <!--Log4Net配 ...
- mvc项目用log4net 记录错误日志
1. 首先下载lognet 下载地址 http://logging.apache.org/log4net/download_log4net.cgi 2.找到bin文件中的net文件夹 之后看你电脑 ...
- ASP.NET MVC中Log4Net记录错误日志的使用
第一.在管理NuGet程序包 =>下载 Log4Net 第二.在web.config配置Log4Net 1:在<configuration>节点下 <configSection ...
- C#中四步轻松使用log4net记录本地日志
在这里,记录我在项目中使用log4net记录本地日志的步骤.在不会之前感觉很难,很神秘,一旦会了之后其实没那么难.其实所有的事情都是一样的,下面我就分享一下我使用log4Net的经验. 第一步:首先从 ...
- C#中四步轻松使用log4net记录本地日志(WPF有点小区别)
在这里,记录我在项目中使用log4net记录本地日志的步骤.在不会之前感觉很难,很神秘,一旦会了之后其实没那么难.其实所有的事情都是一样的,下面我就分享一下我使用log4Net的经验. 第一步:首先从 ...
- log4net 使用总结- (2)在ASP.NET MVC 中使用
log4net在ASP.NET MVC中的配置,还有一种配置方式,即不在web.config中,而是单独新建一个log4net.config 在根目录下 第一.引用log4net.dll 第二 ...
随机推荐
- Shell-遍历删除指定目录
Code: find $LibPath/ -name .svn | xargs rm -rf
- .NetCore Cap 注册 Consul 服务发现
注册服务发现 需要使用Cap中的UseDiscovery方法 具体用法如下 var capConsulConfig = Configuration.GetSection("CapConsul ...
- HTML5练习3
1.输入问题,判断答案,按钮倒计时 主要代码: <!doctype html> <html> <head> <meta charset="utf-8 ...
- bnu 10809 聚餐
Lolilu大牛又要请客了~~有些同学呢,是果断要去的,而有些同学呢,只有确定心中的大牛会参加,他才会参加.Lolilu决定请大家去吃金钱豹,因此希望你告诉他一共会有多少人参加,他才知道带多少钱比较合 ...
- 多线程编程中的EventWaitHandler
首先如果读者是.Net多线程编程的老手,就不用看这篇文章了,这篇文章主要是阐述EventWaitHandler的一些基本原理和用法. 在.NET的System.Threading命名空间中有一个名叫W ...
- 100BASE-TX / 100BASE-T4/100BASE-FX
IEEE标准共有以下几种:10BASE-5:粗缆.最大传输距离500米,使用AUI连接器连接或使用收发器电缆和收发器(MAU)进行连接.10BASE-2:细缆.实际传输距离为185米,使用BNC连接器 ...
- Linux学习路线+资源
Linux学习路线,个人收集分享 学习路线图 资源链接(蓝色下划线字体对应相应资源链接) Linux 基础 Linux 基础 Linux安装专题教程 Linux中文环境 Linux—从菜鸟到高手 鸟哥 ...
- 一个线上程序bug,由通用补数程序引起
下游发现接口可用率非100%,马上线上查看,发现数据在有些情况下通用补数的数据是空, 有20%的用户是没有相应偏好等的数据的,需要通用补数来补数,结果通用补数没有数据. 通用补数数据的检查报警时必须要 ...
- 【WIN10】WIN2D——基本圖形的繪製
DEMO下載地址:http://yunpan.cn/c3iNuHFFAcr8h (提取码:8e48) 先看一個截圖: 繪製了一些基本形狀. DEMO的繪製代碼都非常簡單,不想在博客裡細說了,看代碼更為 ...
- bzoj3111: [Zjoi2013]蚂蚁寻路
题目链接 bzoj3111: [Zjoi2013]蚂蚁寻路 题解 发现走出来的图是一向上的凸起锯齿状 对于每个突出的矩形dp一下就好了 代码 /* */ #include<cstdio> ...