专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > ASP

ASP.NET的异常处理机制之二(实例log4net)

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
ASP.NET的错误处理机制之二(实例log4net)

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

 

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

 

一、基本配置

 

 

1、下载Log4Net,地址如下:http://logging.apache.org/log4net/download_log4net.cgi,如下图所示:

      

2、下载到本地后,进行解压,,并找到对应版本的.NET Framework版本,如下图所示:

 

3、在项目中添加Log4Net.DLL的引用,如下图所示:

 

4、在Web项目根目录下创建log4net.config配置文件,如下图所示:

配置文件log4new.config XML代码如下:

 

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <log4net debug="false">  
  3.   <appender name="LogFileAppender" type="log4net.Appender.FileAppender">  
  4.     <param name="File" value="Log/AT.log"/>  
  5.     <param name="datePattern" value="YY-MM-dd HH:mm"/>  
  6.     <param name="AppendToFile" value="true"/>  
  7.     <layout type="log4net.Layout.PatternLayout">  
  8.       <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>  
  9.     </layout>  
  10.   </appender>  
  11.   <appender name="HttpTraceAppender" type="log4net.Appender.ASPNetTraceAppender">  
  12.     <layout type="log4net.Layout.PatternLayout">  
  13.       <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>  
  14.     </layout>  
  15.   </appender>  
  16.   <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">  
  17.     <layout type="log4net.Layout.PatternLayout">  
  18.       <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>  
  19.     </layout>  
  20.   </appender>  
  21.   <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">  
  22.     <file value="logAT"/>  
  23.     <appendToFile value="true"/>  
  24.     <rollingStyle value="Date"/>  
  25.     <datePattern value="_yyyyMMdd'.log'"/>  
  26.     <staticLogFileName value="false"/>  
  27.     <layout type="log4net.Layout.PatternLayout">  
  28.       <conversionPattern value="%d [%t] %-5p %c - %m%n"/>  
  29.     </layout>  
  30.   </appender>  
  31.   <root>  
  32.     <level value="INFO"/>  
  33.     <!--<level value="ERROR" />-->  
  34.     <appender-ref ref="RollingLogFileAppender"/>  
  35.   </root>  
  36. </log4net>  

 

 

5、项目中添加一个LogHelper.cs操作类,这样可以之后的其他页面进行调用,如下图所示:

 

 

LogHelper.cs类代码如下:

 

[csharp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5.   
  6. [assembly: log4net.Config.XmlConfigurator(Watch = true)]  
  7. namespace APESM_GGJ.CommonClass  
  8. {  
  9.     public class LogHelper  
  10.     {  
  11.         /// <summary>  
  12.         /// 输出日志到Log4Net  
  13.         /// </summary>  
  14.         /// <param name="t"></param>  
  15.         /// <param name="ex"></param>  
  16.         #region static void WriteLog(Type t, Exception ex)  
  17.   
  18.         public static void WriteLog(Type t, Exception ex)  
  19.         {  
  20.             log4net.ILog log = log4net.LogManager.GetLogger(t);  
  21.             log.Error("Error", ex);  
  22.         }  
  23.  
  24.         #endregion  
  25.   
  26.         /// <summary>  
  27.         /// 输出日志到Log4Net  
  28.         /// </summary>  
  29.         /// <param name="t"></param>  
  30.         /// <param name="msg"></param>  
  31.         #region static void WriteLog(Type t, string msg)  
  32.   
  33.         public static void WriteLog(Type t, string msg)  
  34.         {  
  35.             log4net.ILog log = log4net.LogManager.GetLogger(t);  
  36.             log.Error(msg);  
  37.         }  
  38.  
  39.         #endregion  
  40.   
  41.     }  
  42. }  

 

 

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



 

 方法中添加如下代码:

 

[csharp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. protected void Application_Start(object sender, EventArgs e)  
  2. {  
  3.      //应用程序启动时,自动加载配置log4Net  
  4.      XmlConfigurator.Configure();  
  5.  }  

 

 

 

 7、打开Web.config文件,添加如下配置信息,如下图所示:



 

  配置文件代码如下:

 

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2.   
  3. <!--  
  4.   有关如何配置 ASP.NET 应用程序的详细信息,请访问  
  5.   http://go.microsoft.com/fwlink/?LinkId=169433  
  6.   -->  
  7.   
  8. <configuration>  
  9.     
  10.   <configSections>  
  11.     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>  
  12.   </configSections>  
  13.   <log4net configSource="log4net.config"/>  
  14.   <system.web>  
  15.     <httpModules>  
  16.       <!--重写IHttpModule类,需要配置的信息-->  
  17.       <!--<add name="FilterModule" type="APESM_GGJ.FilterModule,APESM_GGJ" />-->  
  18.     </httpModules>  
  19.     <compilation debug="true" targetFramework="4.0" />  
  20.   </system.web>  
  21. </configuration>  



 

 8、在页面中调用,进行日志写入,如下图所示:

页面调用代码:

 

[csharp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3.     if (!IsPostBack)  
  4.     {  
  5.         LogHelper.WriteLog(typeof(Login), "测试在Web项目中使用Log4Net日志!");  
  6.     }  
  7. }  



 

 

9、查看项目根目录下的Log文件夹,可以看见我们写入的日志log文件,如下图所示:

 

 

   至此在Web项目中使用Log4Net进行日志记录的功能就已经实现了。

 

---------------------------------------------------------------------------------------------------------------------

 

二、扩展

 

    上面实现的是将日志写入到文件中,那么如果想写入到数据库中,该如何操作,这里以SQL Server为例,创建一个日志表,然后修改log4net.config文件,如下代码:

 

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <log4net debug="false">  
  3.   <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">  
  4.     <bufferSize value="10" />  
  5.     <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />  
  6.     <connectionString value="DATABASE=CSDN;SERVER=.;UID=sa;PWD=111111;Connect Timeout=15;" />  
  7.     <commandText value="INSERT INTO ErrorLog ([dtDate],[sThread],[sLevel],[sLogger],[sMessage],[sException]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />  
  8.     <parameter>  
  9.       <parameterName value="@log_date" />  
  10.       <dbType value="DateTime" />  
  11.       <layout type="log4net.Layout.RawTimeStampLayout" />  
  12.     </parameter>  
  13.     <parameter>  
  14.       <parameterName value="@thread" />  
  15.       <dbType value="String" />  
  16.       <size value="100" />  
  17.       <layout type="log4net.Layout.PatternLayout">  
  18.         <conversionPattern value="%t" />  
  19.       </layout>  
  20.     </parameter>  
  21.     <parameter>  
  22.       <parameterName value="@log_level" />  
  23.       <dbType value="String" />  
  24.       <size value="200" />  
  25.       <layout type="log4net.Layout.PatternLayout">  
  26.         <conversionPattern value="%p" />  
  27.       </layout>  
  28.     </parameter>  
  29.     <parameter>  
  30.       <parameterName value="@logger" />  
  31.       <dbType value="String" />  
  32.       <size value="500" />  
  33.       <layout type="log4net.Layout.PatternLayout">  
  34.         <conversionPattern value="%logger" />  
  35.       </layout>  
  36.     </parameter>  
  37.     <parameter>  
  38.       <parameterName value="@message" />  
  39.       <dbType value="String" />  
  40.       <size value="3000" />  
  41.       <layout type="log4net.Layout.PatternLayout">  
  42.         <conversionPattern value="%m" />  
  43.       </layout>  
  44.     </parameter>  
  45.     <parameter>  
  46.       <parameterName value="@exception" />  
  47.       <dbType value="String" />  
  48.       <size value="4000" />  
  49.       <layout type="log4net.Layout.ExceptionLayout" />  
  50.     </parameter>  
  51.   </appender>  
  52.   <!-- setup the root category, add the appenders and set the default level -->  
  53.   <root>  
  54.     <level value="WARN"/>  
  55.     <level value="INFO"/>  
  56.     <level value="DEBUG"/>  
  57.     <level value="FINE"/>  
  58.     <appender-ref ref="ADONetAppender" />  
  59.   </root>  
  60.   <!-- specify the level for some specific categories -->  
  61.   <logger name="iNotes">  
  62.     <level value="WARN"/>  
  63.     <level value="INFO"/>  
  64.     <level value="DEBUG"/>  
  65.     <level value="FINE"/>  
  66.     <appender-ref ref="ADONetAppender"/>  
  67.   </logger>  
  68.   <logger name="StellaLogger">  
  69.     <level value="ALL"/>  
  70.     <appender-ref ref="AdoNetAppender" />  
  71.   </logger>  
  72. </log4net>  

 

 

注意<bufferSize value="10" /> ,需要注意的一个参数 bufferSize=10 表示是记录10 条到缓冲区,满10条后再写入SQL server;

测试时将其修改为1

生产环境建议100

 

上面配置节中数据库名,用户名和密码,根据实际情况进行修改。

 

数据库表ErrorLog创建语句为:

 

[sql] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. CREATE TABLE ErrorLog(     
  2.     nId bigint IDENTITY(1,1) NOT NULL,     
  3.     dtDate datetime NOT NULL,     
  4.     sThread nvarchar(100) NOT NULL,     
  5.     sLevel nvarchar(200) NOT NULL,     
  6.     sLogger nvarchar(500) NOT NULL,     
  7.     sMessage nvarchar(3000) NOT NULL,     
  8.     sException nvarchar(4000) NULL  
  9. );  


如下图所示:

 

 

 

三、整合

想同时保存到日志文件和数据库,log4net.config的文件配置如下XML代码所示:

 

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <log4net debug="false">  
  3.   <!-- 将日志信息写入SQL Server数据库 2015-09-29-->  
  4.   <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">  
  5.     <bufferSize value="1" />  
  6.     <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />  
  7.     <connectionString value="DATABASE=CSDN;SERVER=.;UID=sa;PWD=111111;Connect Timeout=15;" />  
  8.     <commandText value="INSERT INTO ErrorLog ([dtDate],[sThread],[sLevel],[sLogger],[sMessage],[sException]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />  
  9.     <parameter>  
  10.       <parameterName value="@log_date" />  
  11.       <dbType value="DateTime" />  
  12.       <layout type="log4net.Layout.RawTimeStampLayout" />  
  13.     </parameter>  
  14.     <parameter>  
  15.       <parameterName value="@thread" />  
  16.       <dbType value="String" />  
  17.       <size value="100" />  
  18.       <layout type="log4net.Layout.PatternLayout">  
  19.         <conversionPattern value="%t" />  
  20.       </layout>  
  21.     </parameter>  
  22.     <parameter>  
  23.       <parameterName value="@log_level" />  
  24.       <dbType value="String" />  
  25.       <size value="200" />  
  26.       <layout type="log4net.Layout.PatternLayout">  
  27.         <conversionPattern value="%p" />  
  28.       </layout>  
  29.     </parameter>  
  30.     <parameter>  
  31.       <parameterName value="@logger" />  
  32.       <dbType value="String" />  
  33.       <size value="500" />  
  34.       <layout type="log4net.Layout.PatternLayout">  
  35.         <conversionPattern value="%logger" />  
  36.       </layout>  
  37.     </parameter>  
  38.     <parameter>  
  39.       <parameterName value="@message" />  
  40.       <dbType value="String" />  
  41.       <size value="3000" />  
  42.       <layout type="log4net.Layout.PatternLayout">  
  43.         <conversionPattern value="%m" />  
  44.       </layout>  
  45.     </parameter>  
  46.     <parameter>  
  47.       <parameterName value="@exception" />  
  48.       <dbType value="String" />  
  49.       <size value="4000" />  
  50.       <layout type="log4net.Layout.ExceptionLayout" />  
  51.     </parameter>  
  52.   </appender>  
  53.   
  54.   <!-- 将日志信息写入到项目日志文件 2015-09-29 -->  
  55.   <appender name="LogFileAppender" type="log4net.Appender.FileAppender">  
  56.     <param name="File" value="Log/AT.log"/>  
  57.     <param name="datePattern" value="YY-MM-dd HH:mm"/>  
  58.     <param name="AppendToFile" value="true"/>  
  59.     <layout type="log4net.Layout.PatternLayout">  
  60.       <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>  
  61.     </layout>  
  62.   </appender>  
  63.   <appender name="HttpTraceAppender" type="log4net.Appender.ASPNetTraceAppender">  
  64.     <layout type="log4net.Layout.PatternLayout">  
  65.       <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>  
  66.     </layout>  
  67.   </appender>  
  68.   <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">  
  69.     <layout type="log4net.Layout.PatternLayout">  
  70.       <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>  
  71.     </layout>  
  72.   </appender>  
  73.   <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">  
  74.     <file value="logAT"/>  
  75.     <appendToFile value="true"/>  
  76.     <rollingStyle value="Date"/>  
  77.     <datePattern value="_yyyyMMdd'.log'"/>  
  78.     <staticLogFileName value="false"/>  
  79.     <layout type="log4net.Layout.PatternLayout">  
  80.       <conversionPattern value="%d [%t] %-5p %c - %m%n"/>  
  81.     </layout>  
  82.   </appender>  
  83.   
  84.   <!--设置根目录,添加appenders并设置默认日志等级 -->  
  85.   <root>  
  86.     <level value="WARN"/>  
  87.     <level value="INFO"/>  
  88.     <level value="DEBUG"/>  
  89.     <level value="FINE"/>  
  90.     <appender-ref ref="ADONetAppender" />  
  91.     <appender-ref ref="RollingLogFileAppender"/>  
  92.   </root>  
  93.   
  94.   <!-- 为特定的目录指定等级 -->  
  95.   <logger name="iNotes">  
  96.     <level value="WARN"/>  
  97.     <level value="INFO"/>  
  98.     <level value="DEBUG"/>  
  99.     <level value="FINE"/>  
  100.     <appender-ref ref="ADONetAppender"/>  
  101.     <appender-ref ref="RollingLogFileAppender"/>  
  102.   </logger>  
  103.   
  104.   <logger name="StellaLogger">  
  105.     <level value="ALL"/>  
  106.     <appender-ref ref="AdoNetAppender" />  
  107.     <appender-ref ref="RollingLogFileAppender"/>  
  108.   </logger>  
  109. </log4net>  


2楼牛腩
支持支持333
1楼影月无痕
建议log4net从NUGET获取
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

  • ASP怎么隐藏表单

    ASP如何隐藏表单 <%if Cookies_Toy ="" then response.write "<a href='login.asp'>登录</a> <a href='reg.asp'>注册</a>" ...

  • 为何js调用css脚本后没效果

    为什么js调用css脚本后没效果 这个是css的脚本代码: body,ul,li{margin: 0; padding: 0; border: 0;} body {background: #f5f...

  • 怎么伪造post请求,求指点。

    如何伪造post请求,求指点。。。 要查询大批(也就几万个)运单的状态,那查询网站一次最多查24个,这一个个搞会搞死人的。。 有...

  • Asp.net_简略代码设置GridView自适应列宽不变形

    Asp.net_简单代码设置GridView自适应列宽不变形 动态绑定的GridView由于列数不固定,而列又太多(博主做的这个项目有150个左右的字段...

  • ASP.NET上实现AJAX注册提醒

    ASP.NET下实现AJAX注册提醒 Ajax全称是,主要是利用JavaScript实现异步的数据传输,首先说异步,异步是当前操作进行的时候,用...

  • aspnet_regiis装配出错:0x80070005 拒绝访问

    aspnet_regiis安装出错:0x80070005 拒绝访问 点击右边红色标题查看本文完整版:aspnet_regiis安装出错:0x80070005 拒绝访问安装...

  • 关于网站边框解决方法

    关于网站边框 像hao123这样的网站上的边框是着么弄的?背景图片吗?http://www.hao123.com 另外哪个素材网站有实用的这内素材 -----...

  • ! 多表分组查询统计

    求助!! 多表分组查询统计 高手们,帮帮忙! 用户表 D_user 为 ID Username GroupID 1 张三 2 2 李四 2 3 王五 ...

  • 在Paypal交付的同时,把表单的数据提交给数据库

    在Paypal提交的同时,把表单的数据提交给数据库 本帖最后由 liuyang2708 于 2012-11-20 23:14:54 编辑 在提交这个支付...

  • 虚拟目录上JavaScript不能正常执行

    虚拟目录下JavaScript不能正常执行 各位大侠好,我在同一台服务器上用两种方式部署同一个网站。 第一种方法:在IIS下直接建一个网站...

热门推荐: