当前位置: 首页 > news >正文

Log4Net 在ASP.NET WebForm 和 MVC的全局配置

使用log4net可以很方便地为应用添加日志功能。应用Log4net,开发者可以很精确地控制日志信息的输出,减少了多余信息,提高了日志记录性能。同时,通过外部配置文件,用户可以不用重新编译程序就能改变应用的日志行为,使得用户可以根据情况灵活地选择要记录的信息。

 

   那么我们如何在Web项目中使用Log4Net呢?

 

配置方面请点击链接跳转上一笔记:

ASP.NET的错误处理机制之二(实例log4net)

这次主要针对上次的错误机制讲解如何进行Log4Net 在ASP.NET WebForm 和 MVC的全局配置

 

一、MVC中的全局配置

在项目中添加一个全局应用程序类Global.asax,如下图所示:



 

 

 

 方法中添加如下代码:

 

    1. protected void Application_Start(object sender, EventArgs e)  
    2. {  
    3.  #region 应用程序启动时,自动加载配置log4Net
    4.   XmlConfigurator.Configure();
    5.  #endregion
    6.  }  
    7. protected void Application_Error(object sender, EventArgs e)
      {
      #region 捕获全局异常

      Exception error = Server.GetLastError().GetBaseException();
      Exception ex = Server.GetLastError().GetBaseException();
      string ip = Request.ServerVariables.Get("HTTP_X_FORWARDED_FOR") == null ?
      Request.ServerVariables.Get("Remote_Addr").ToString().Trim() :
      Request.ServerVariables.Get("HTTP_X_FORWARDED_FOR").ToString().Trim();
      string logpath = Server.MapPath("~/Log/" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt");
      StringBuilder builder = new StringBuilder();
      builder.AppendLine(string.Format("========== {0} Application_Error BEGIN ==========", DateTime.Now));
      builder.AppendLine("Ip:" + ip);
      builder.AppendLine("浏览器:" + Request.Browser.Browser.ToString());
      builder.AppendLine("浏览器版本:" + Request.Browser.MajorVersion.ToString());
      builder.AppendLine("操作系统:" + Request.Browser.Platform.ToString());
      builder.AppendLine("页面:" + Request.Url.ToString());
      builder.AppendLine("错误信息:" + ex.Message);
      builder.AppendLine("错误源:" + ex.Source);
      builder.AppendLine("异常方法:" + ex.TargetSite);
      builder.AppendLine("堆栈信息:" + ex.StackTrace);
      builder.AppendLine("========== Application_Error END ===================");

      lock (logpath)
      {
      try
      {
      using (var writer = new StreamWriter(logpath, true))
      {
      ZX.B2C.GoodBaby.Common.LogHelper.WriteLog(typeof(RequestNotification), builder.ToString());
      }
      }
      catch
      {
      // 防止写文件时,文件被人为打开无法写入等
      // 记录日志报错不做处理,不应影响用户继续使用
      }
      }

      Server.ClearError();
      Response.Redirect("/Error/ErrorPath404");//跳出至404页面

      #endregion
      }

 

 

二、WebForm中的全局配置

 

在项目中添加一个全局应用程序类Global.asax,如下图所示:

 

 

 

 

 

 方法中添加如下代码:

 

  1. protected void Application_Start(object sender, EventArgs e)
    {
    #region 应用程序启动时,自动加载配置log4Net

    XmlConfigurator.Configure();

    #endregion
    }
    /// <summary>
    /// 捕获全局异常
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>

    protected void Application_Error(object sender, EventArgs e)
    {
    #region 捕获全局异常

    Exception error = Server.GetLastError().GetBaseException();
    Exception ex = Server.GetLastError().GetBaseException();
    string ip = Request.ServerVariables.Get("HTTP_X_FORWARDED_FOR") == null ?
    Request.ServerVariables.Get("Remote_Addr").ToString().Trim() :
    Request.ServerVariables.Get("HTTP_X_FORWARDED_FOR").ToString().Trim();
    string logpath = Server.MapPath("~/Log/" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt");
    StringBuilder builder = new StringBuilder();
    builder.AppendLine(string.Format("========== {0} Application_Error BEGIN ==========", DateTime.Now));
    builder.AppendLine("Ip:" + ip);
    builder.AppendLine("浏览器:" + Request.Browser.Browser.ToString());
    builder.AppendLine("浏览器版本:" + Request.Browser.MajorVersion.ToString());
    builder.AppendLine("操作系统:" + Request.Browser.Platform.ToString());
    builder.AppendLine("页面:" + Request.Url.ToString());
    builder.AppendLine("错误信息:" + ex.Message);
    builder.AppendLine("错误源:" + ex.Source);
    builder.AppendLine("异常方法:" + ex.TargetSite);
    builder.AppendLine("堆栈信息:" + ex.StackTrace);
    builder.AppendLine("========== Application_Error END ===================");

    lock (logpath)
    {
    try
    {
    using (var writer = new StreamWriter(logpath, true))
    {
    ZX.B2C.GoodBaby.Common.LogHelper.WriteLog(typeof(RequestNotification), builder.ToString());
    }
    }
    catch
    {
    // 防止写文件时,文件被人为打开无法写入等
    // 记录日志报错不做处理,不应影响用户继续使用
    }
    }

    Server.ClearError();
    Response.Redirect("~/Error.htm");

    #endregion
    }

 

 原文链接:

Log4Net 在ASP.NET WebForm 和 MVC的全局配置

转载于:https://www.cnblogs.com/shanshanlaichi/p/6553564.html

相关文章:

  • 也谈谈Unity的transform使用
  • 多个文本框录入,使用回车键替找Tab键
  • debian8 更新系统内核
  • 查询SQL存储过程创建时间
  • 利用反射——查看类的成员
  • 【码云周刊第 12 期】走过微软20年,埋头并发编程15年,如何减少代码的认知负荷?...
  • 直方图、基数、选择性、群集因子
  • Codeforces 771C:Bear and Tree Jumps
  • 胡适:一个最低限度的国学书目
  • 网站功能小Demo——图片文件上传
  • Linux常用命令汇总
  • 科普:Netcat使用手册
  • 磁化强度
  • rpc 理解
  • spark使用
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • httpie使用详解
  • js操作时间(持续更新)
  • Linux CTF 逆向入门
  • node入门
  • pdf文件如何在线转换为jpg图片
  • PHP 7 修改了什么呢 -- 2
  • 简单数学运算程序(不定期更新)
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 我与Jetbrains的这些年
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 带你开发类似Pokemon Go的AR游戏
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (14)Hive调优——合并小文件
  • (4.10~4.16)
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (windows2012共享文件夹和防火墙设置
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (黑马C++)L06 重载与继承
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ../depcomp: line 571: exec: g++: not found
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net Signalr 使用笔记
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET的微型Web框架 Nancy
  • .NET与 java通用的3DES加密解密方法
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [C++] new和delete
  • [CISCN 2023 初赛]go_session
  • [cocos creator]EditBox,editing-return事件,清空输入框
  • [hive]中的字段的数据类型有哪些
  • [JavaWeb学习] idea新建web项目
  • [JavaWeb学习] Spring Ioc和DI概念思想