asp.net利用log4net寫入日志到SqlServer數據庫

作者: Kein  來源: 博客園  發布時間: 2010-10-14 07:19  閱讀: 9482 次  推薦: 6   原文鏈接   [收藏]  
摘要:Log4net是一個開源的錯誤日志記錄項目,asp.net利用log4net寫入日志到SqlServer數據庫。下面就我的安裝部署log4net到MS sql server的經驗與大家分享。

  asp.net利用log4net寫入日志到SqlServer數據庫,Log4net是一個開源的錯誤日志記錄項目,易用性強,源自log4j,品質值得信賴。 下面就我的安裝部署log4net到MS sql server的經驗與大家分享。

  下載log4net的Dll文件并引入到項目中,在你的web主項目(比如MainWeb.csproj)添加對log4net.dll的引用,并在相應的Globall.cs文件中的Application_Start 事件中寫入

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

在這個項目對應的Assembly.cs文件中添加一行

[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文件, 是因為這樣可以單獨修改調試部署,也就是非侵入式安裝的思想。呵呵。

  內容大概如下:

<?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>  

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

 

  數據庫生成腳本

CREATE 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) 

 

  第四步:在需要記錄的每個類中添加如下代碼

 

private static log4net.ILog myLogger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);  

給出一個例子

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

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

  調試時可以改為1,實際應用建議為100

6
2
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()