使用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的全局配置

Log4Net 在ASP.NET WebForm 和 MVC的全局配置的更多相关文章

  1. 解析ASP.NET WebForm和Mvc开发的区别

    因为以前主要是做WebFrom开发,对MVC开发并没有太深入的了解.自从来到创新工场的新团队后,用的技术都是自己以前没有接触过的,比如:MVC 和EF还有就是WCF,压力一直很大.在很多问题都是不清楚 ...

  2. 解析ASP.NET WebForm和Mvc开发的区别 分类: ASP.NET 2013-12-29 01:59 11738人阅读 评论(5) 收藏

    因为以前主要是做WebFrom开发,对MVC开发并没有太深入的了解.自从来到创新工场的新团队后,用的技术都是自己以前没有接触过的,比如:MVC 和EF还有就是WCF,压力一直很大.在很多问题都是不清楚 ...

  3. asp.net core 3.0 MVC JSON 全局配置

    asp.net core 3.0 MVC JSON 全局配置 System.Text.Json(default) startup配置代码如下: using System.Text.Encodings. ...

  4. ASP.NET中HttpApplication中ProcessRequest方法中运行的事件顺序;ASP.NET WebForm和MVC总体请求流程图

    ASP.NET中HttpApplication中ProcessRequest方法中运行的事件顺序 1.BeginRequest  開始处理请求 2.AuthenticateRequest 授权验证请求 ...

  5. [转]asp.net webform 与mvc 共享session

    公司内部系统最早是用.net webform模式开发的,现新项目用.net mvc 开发,现存在的问题就是如何保持原有.net webform的登录状态不变,而在mvc中能够验证用户的登录状态,也就是 ...

  6. asp.net webform 与mvc 共享session

    公司内部系统最早是用.net webform模式开发的,现新项目用.net mvc 开发,现存在的问题就是如何保持原有.net webform的登录状态不变,而在mvc中能够验证用户的登录状态,也就是 ...

  7. [转]解析ASP.NET WebForm和Mvc开发的区别

    因为以前主要是做WebFrom开发,对MVC开发并没有太深入的了解.自从来到创新工场的新团队后,用的技术都是自己以前没有接触过的,比如:MVC 和EF还有就是WCF,压力一直很大.在很多问题都是不清楚 ...

  8. Asp.Net WebForm和MVC同样优秀!

    不是说MVC不好,而是WebForm并没有那么不堪,和Mvc同样优秀.对说WebForm缺点多的,表示不服,求指教,虽然本人有些见解可能比较浅薄. 看过很多文章和书籍,都会拿MVC模式和WebForm ...

  9. ASP.NET WebForm与MVC优缺点

    发表于我的个人网站中,请点击阅读!

随机推荐

  1. Webpack 热部署检测不到文件变化问题

    Webpack 热部署检测不到文件变化问题 今天在用Webpack开发的时候,突然发现文件变动后热部署功能不工作了,感觉好像是webpack检测不到文件的修改了.折腾了半天,开始一直以为是自己的代码有 ...

  2. MySQL 的中文乱码问题终结

    中文正确 1:保存sql脚本文件 utf8 !!!!! ANSI<-->GBK 2:打开mysql窗口 SET NAMES UTF8; 每次新打开窗口执行指令 3:SOURCE d:/1. ...

  3. mac brew安装使用卸载

    (一)安装 1.浏览器打开brew.sh,进入homebrew主页.找到install homebrew 的命令: /usr/bin/ruby -e "$(curl -fsSL https: ...

  4. ACM学习历程—51NOD 1412 AVL树的种类(递推)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1770 这是这次BSG白山极客挑战赛的B题.设p(i, j)表示节点个数为 ...

  5. PADS Router 虚焊盘显示怎么办?

    PADS Router 虚焊盘显示怎么办? 群里朋友有问不知道按了什么键,焊盘显示成以下这种,怎么还原? 解答比较简单,按个 T 就可以. 这个显示是有好处的,特别是焊盘有过孔时一眼就看到.

  6. 一个kafka异常

    卡夫卡经常超时,而且超时时间固定为三分钟,因为时间长度固定,所以逆推一下,发现现有的配置里面有个session的timeout是三分钟,但是其实后来验证发现真是的原因是connect timeout, ...

  7. unidac连接ORACLE免装客户端驱动

      当你选择Oracle作数据库服务器时,客户端一般需要装一个肥硕的200M左右客户端,而且还要做连接配置,尤其是C/S模式,客户端多的时候非常不便.当然,网上也有一个10M左右的Oracle精简客户 ...

  8. contOS 下安装mysql

    一.mysql简介 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库,咱 ...

  9. (转)Oracle存储过程基本语法

    本文转载自:http://www.cnblogs.com/hero4china/articles/base_rule_oracle_procedure.html 存储过程 1  CREATE OR R ...

  10. java图形用户界面边界布局管理器

    总结:不同方向的组件,所用的板是不同的: package com.moc; //用布局写一个界面 ///运用边界布局 //2个按钮在北,2个按钮在南 //中央一个大按钮 //将同一方向的组件封装后布局 ...