1. 程式人生 > >log4net寫入到SQL server的基本配置 downmoon)

log4net寫入到SQL server的基本配置 downmoon)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

Log4net是一個開源的錯誤日誌記錄專案,易用性強,源自log4j,品質值得信賴。

下面彙報一下我的安裝部署log4net到MS sql server的經驗。

一、首先是下載log4net最新版

地址:http://logging.apache.org/log4net/ 

直接引用dll也行,我是把下載的原始碼在Vs2005下編譯成log4net.dll

 二、在你的web主專案(比如MainWeb.csproj)新增對log4net.dll的引用,並在相應的Globall.cs檔案中的Application_Start事件中寫入

 

  1. protected void Application_Start(Object sender, EventArgs e) 
  2.         {
    //
  3.             log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));
  4.         }

在這個專案對應的Assembly.cs檔案中新增一行

 

  1. [assembly: log4net.Config.XmlConfigurator(ConfigFile = 
    "log4net.config", Watch = true)] 

 

這裡有個地方需要注意

如果我的主專案是純粹的程式碼分離後的aspx/ascx檔案, 不含cs檔案,那麼中需要在飽含cs檔案的專案(比如common.web.csproj)檔案中新增這兩行程式碼

舉個例子

解決方案如下:

MySolution.Sln

       |-----common.Web.csproj(包含cs檔案)

       |-----Business1.Web.csproj(包含cs檔案,繼承自common.Web.csproj)

       |-----Business********.Web.csproj(包含cs檔案,繼承自common.Web.csproj)

       |-----BusinessX.Web.csproj(包含cs檔案,繼承自common.Web.csproj)

    |-----MainWeb.csproj(不包含cs檔案)

此時, 只需要在 common.Web.csproj中做以上動作就可以了!其他專案只需要引用 dll即可。

 第三步:新增logn4net.confgi在主專案根目錄下:與web.config同路徑,之所以不寫入web,config檔案, 是因為這樣可以單獨修改除錯部署,也就是非侵入式安裝的思想。呵呵。

內容大概如下:

 

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

 

 

 

具體的可以看看官方文件

http://logging.apache.org/log4net/release/sdk/index.html

 

基本完成了!需要注意的一個引數

 

<bufferSize value="10" />,表示是記錄10 條到緩衝區,滿10條後再寫入SQL server

除錯時可以改為1,實際應用建議為100

 

資料庫生成指令碼

[python] view plain copy print ?
  1. SET ANSI_NULLS ON  
  2. GO  
  3. SET QUOTED_IDENTIFIER ON  
  4. GO  
  5. SET ANSI_PADDING ON  
  6. GO  
  7. CREATE TABLE [dbo].[ErrorLog](  
  8.     [nId] [bigint] IDENTITY(1,1) NOT NULL,  
  9.     [dtDate] [datetime] NOT NULL,  
  10.     [sThread] [varchar](100) NOT NULL,  
  11.     [sLevel] [varchar](200) NOT NULL,  
  12.     [sLogger] [varchar](500) NOT NULL,  
  13.     [sMessage] [varchar](3000) NOT NULL,  
  14.     [sException] [varchar](4000) NULL,  
  15.  CONSTRAINT [PK_ErrorLog] PRIMARY KEY CLUSTERED   
  16. (  
  17.     [nId] ASC  
  18. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]  
  19. ) ON [PRIMARY]  
  20. GO  
  21. SET ANSI_PADDING OFF  
  22. GO  
  23. ALTER TABLE [dbo].[ErrorLog] ADD  DEFAULT (getdate()) FOR [dtDate]  
  24. GO  
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_PADDING ONGOCREATE TABLE [dbo].[ErrorLog](    [nId] [bigint] IDENTITY(1,1) NOT NULL,    [dtDate] [datetime] NOT NULL,    [sThread] [varchar](100) NOT NULL,    [sLevel] [varchar](200) NOT NULL,    [sLogger] [varchar](500) NOT NULL,    [sMessage] [varchar](3000) NOT NULL,    [sException] [varchar](4000) NULL, CONSTRAINT [PK_ErrorLog] PRIMARY KEY CLUSTERED (    [nId] ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]) ON [PRIMARY]GOSET ANSI_PADDING OFFGOALTER TABLE [dbo].[ErrorLog] ADD  DEFAULT (getdate()) FOR [dtDate]GO

第四步:在需要記錄的每個類中新增如下程式碼

[c-sharp] view plain copy print ?
  1. private static log4net.ILog myLogger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);  
private static log4net.ILog myLogger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

給出一個例子

[c-sharp] view plain copy print ?
  1. private void TestLog()  
  2.         {  
  3.             try  
  4.             {  
  5.                 //  
  6.             }  
  7.             catch (Exception ex)  
  8.             {  
  9.                 Loghandle by Tony 2008.11.21#region Loghandle by Tony 2008.11.21  
  10.                 string loginid = EmptyString;  
  11.                 //if (user != null) { loginid = user.LoginID; }  
  12.                 myLogger.Error(GetErrorMessage(loginid, 1), ex);  
  13.                 //Debug("系統已記錄錯誤,請聯絡管理員!"); return;  
  14.                 //Debug(ErrorHandle.GetErrorInfoByID(999), this.ClientID); return;  
  15.                 #endregion  
  16.             }  
  17.              
  18.         }  
private void TestLog()        {            try            {                //            }            catch (Exception ex)            {                Loghandle by Tony 2008.11.21#region Loghandle by Tony 2008.11.21                string loginid = EmptyString;                //if (user != null) { loginid = user.LoginID; }                myLogger.Error(GetErrorMessage(loginid, 1), ex);                //Debug("系統已記錄錯誤,請聯絡管理員!"); return;                //Debug(ErrorHandle.GetErrorInfoByID(999), this.ClientID); return;                #endregion            }                   }

 記錄的樣式如下:

[xhtml] view plain copy print ?
  1. table><tr><td>nId</td>        
  2.    <td>dtDate</td> <td>sThread</td> <td>sLevel</td> <td>sLogger</td> <td>sMessage</td> <td>sException</td>  
  3.    </tr>  
  4.    <tr><td>1        </td>  
  5.      
  6.    <td>2008-11-21 11:03:20.470</td> <td>1904</td> <td>ERROR Agronet.Product.Web.UI.Controls.Vegnet.Detail</td> <td>10.103.33.10</td> <td>System.OverflowException: 值對於 Int16 太大或太小。</td> <td> ---> System.OverflowException: 值對於 Int32 太大或太小。 在 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) 在 System.Int16.Parse(String s, NumberStyles style, NumberFormatInfo info) --- 內部異常堆疊跟蹤的結尾 --- 在 System.Int16.Parse(String s, NumberStyles style, NumberFormatInfo info) 在 System.Int16.Parse(String s) 在 Agronet.Product.Web.UI.Controls.Vegnet.Detail.BindList() 位置 P:/Test/Web/UI/Controls/Vegnet/Detail.cs:行號 141</td>  
  7.    </tr></table>  
table><tr><td>nId</td>         <td>dtDate</td> <td>sThread</td> <td>sLevel</td> <td>sLogger</td> <td>sMessage</td> <td>sException</td>   </tr>   <tr><td>1        </td>      <td>2008-11-21 11:03:20.470</td> <td>1904</td> <td>ERROR Agronet.Product.Web.UI.Controls.Vegnet.Detail</td> <td>10.103.33.10</td> <td>System.OverflowException: 值對於 Int16 太大或太小。</td> <td> ---> System.OverflowException: 值對於 Int32 太大或太小。 在 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) 在 System.Int16.Parse(String s, NumberStyles style, NumberFormatInfo info) --- 內部異常堆疊跟蹤的結尾 --- 在 System.Int16.Parse(String s, NumberStyles style, NumberFormatInfo info) 在 System.Int16.Parse(String s) 在 Agronet.Product.Web.UI.Controls.Vegnet.Detail.BindList() 位置 P:/Test/Web/UI/Controls/Vegnet/Detail.cs:行號 141</td>   </tr></table>

 

OK! 結束,

Any Question ,Please Mail to tony(邀月)[email protected]

寫入檔案請看這裡

     log4net寫入日誌檔案示例

助人等於自助!   [email protected]

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述