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
相關文章
相關標籤/搜索