asp.net Web項目中使用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代碼如下:

 

 
 
 
  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>  

 

5、項目中添加一個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. }  

 

 

 6、在項目中添加一個全局應用程序類Global.asax,如下圖所示:



 

 方法中添加如下代碼:

 

 
 
 
  1. protected void Application_Start(object sender, EventArgs e)  
  2. {  
  3.      //應用程序啟動時,自動加載配置log4Net  
  4.      XmlConfigurator.Configure();  
  5.  }  

 

 

 

 7、打開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>  


 

 8、在頁面中調用,進行日志寫入,如下圖所示:

頁面調用代碼:

 

 
 
 
  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文件,如下代碼:

 

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

如下圖所示:

 

 

 

三、整合

想同時保存到日志文件和數據庫,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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM