搜索

查看: 3099|回复: 11

[ASP.NET] ASP.NET MVC使用Log4Net记录异常日志并跳转到静态页

[复制链接]
发表于 2023-5-4 11:30:01 | 显示全部楼层 |阅读模式
Editor 2023-5-4 11:30:01 3099 11 看全部
本篇体验在ASP.NET MVC 4中使用Log4Net记录日志。
通过NuGet安装Log4Net。

202291583725068.png

202291583725068.png


需求是:当出错时导向到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记录异常日志并跳转到静态页的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持知鸟论坛
回复

使用道具 举报

发表于 2023-6-28 20:44:48 | 显示全部楼层
123456848 2023-6-28 20:44:48 看全部
楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
回复

使用道具 举报

发表于 2023-6-28 22:18:25 | 显示全部楼层
冀苍鸾 2023-6-28 22:18:25 看全部
我看不错噢 谢谢楼主!知鸟论坛越来越好!
回复

使用道具 举报

发表于 2023-6-29 01:59:05 | 显示全部楼层
哈哈SE7 2023-6-29 01:59:05 看全部
楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
回复

使用道具 举报

发表于 2023-6-29 02:11:02 | 显示全部楼层
123456833 2023-6-29 02:11:02 看全部
其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
回复

使用道具 举报

发表于 2023-6-30 01:24:49 | 显示全部楼层
dxf17 2023-6-30 01:24:49 看全部
其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
回复

使用道具 举报

发表于 2023-6-30 09:42:03 | 显示全部楼层
123456809 2023-6-30 09:42:03 看全部
感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
回复

使用道具 举报

发表于 2023-6-30 20:41:44 | 显示全部楼层
123456865 2023-6-30 20:41:44 看全部
感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
回复

使用道具 举报

发表于 2023-7-3 14:19:49 | 显示全部楼层
戏做顿 2023-7-3 14:19:49 看全部
楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
回复

使用道具 举报

发表于 2023-7-3 21:29:19 | 显示全部楼层
ffycxyw2274436 2023-7-3 21:29:19 看全部
既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
回复

使用道具 举报

  • 您可能感兴趣
点击右侧快捷回复 【请勿灌水】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表

RSS订阅| SiteMap| 小黑屋| 知鸟论坛
联系邮箱E-mail:zniao@foxmail.com
快速回复 返回顶部 返回列表