asp.net Web项目中使用Log4Net进行错误日志记录

 

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

 

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

 

1、基本配置web

 

 

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

      

二、下载到本地后,进行解压,,并找到对应版本的.NET Framework版本,以下图所示:数据库

 

三、在项目中添加Log4Net.DLL的引用,以下图所示:apache

 

四、在Web项目根目录下建立log4net.config配置文件,以下图所示:app

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

 

 
 
 
  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="log\AT"/>  
  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>  

 

五、项目中添加一个LogHelper.cs操做类,这样能够以后的其余页面进行调用,以下图所示:性能

 

 

LogHelper.cs类代码以下:测试

 

 
 
 
  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. }  

 

 

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



 

 方法中添加以下代码:

 

 
 
 
  1. protected void Application_Start(object sender, EventArgs e)  
  2. {  
  3.      //应用程序启动时,自动加载配置log4Net  
  4.      XmlConfigurator.Configure();  
  5.  }  

 

 

 

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



 

  配置文件代码以下:

 

 
 
 
  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>  


 

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

页面调用代码:

 

 
 
 
  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3.     if (!IsPostBack)  
  4.     {  
  5.         LogHelper.WriteLog(typeof(Login), "测试在Web项目中使用Log4Net日志!");  
  6.     }  
  7. }  


 

 

九、查看项目根目录下的Log文件夹,能够看见咱们写入的日志log文件,以下图所示:


 

 

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


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

 

2、扩展

 

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

 

 
 
 
  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建立语句为:

 

 
 
  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. );  

以下图所示:

 

 

 

3、整合

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

 

 
 
  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="log\AT"/>  
  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
相关文章
相关标签/搜索