ASP.NET MVC使用Log4Net记录异常日志并跳转到静态页
- 技术交流
- 2024-10-01 09:37:02
本篇体验在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。
...... ......
在全局文件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记录异常日志并跳转到静态页由讯客互联技术交流栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“ASP.NET MVC使用Log4Net记录异常日志并跳转到静态页”