[C#]log4net寫SQLServer資料庫日誌的配置方法

來源:互聯網
上載者:User
server|sqlserver|資料|資料庫

資料庫日誌表的準備

在資料庫中準備一個這樣的表,mail_web_log:

產生指令碼:

CREATE TABLE [dbo].[mail_web_log] (

   [nId] [int] IDENTITY (1, 1) NOT NULL ,

    [dtDate] [datetime] NOT NULL ,

    [sThread] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,

    [sLevel] [varchar] (200) COLLATE Chinese_PRC_CI_AS NOT NULL ,

    [sLogger] [varchar] (200) COLLATE Chinese_PRC_CI_AS NOT NULL ,

    [sMessage] [varchar] (2000) COLLATE Chinese_PRC_CI_AS NOT NULL ,

    [sException] [varchar] (4000) COLLATE Chinese_PRC_CI_AS NULL

) ON [PRIMARY]

GO

 

ALTER TABLE [dbo].[mail_web_log] WITH NOCHECK ADD

    CONSTRAINT [PK_mail_web_log] PRIMARY KEY  CLUSTERED

    (

        [nId]

    )  ON [PRIMARY]

GO

其中,sLevel欄位代表日誌的層級;sLogger欄位代表日誌是由哪一個類或者檔案產生的,如

“iNotes.Default.Page_Load(c:\mail\mailsource\default.aspx.cs:269)”;sMessage欄位代表日誌的內容。

Web.config中Log4net的配置

注意其中“ADONetAppender”節點的寫法,以及各個欄位的列印方法。

一般來說,我們對每一個日誌欄位定義一個“<Layout type="log4net.Layout.PatternLayout">”節點以告訴log4net如何輸出,在這個節點之下,我們需要配置

<conversionPattern value="%t" />

%t在log4net中專門指的是線程名。

下面我們對“%d %t %p %l %m %n”一一講解:

l         %d輸出日誌時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyyy-MM-dd HH:mm:ss},輸出類似:2005-7-19 17:49:27,剛好適合插入SQLServer;

l         %t  產生該日誌事件的線程名;

l         %p 日誌的log_level,如DEBUG、WARN或者INFO;

l         %c  輸出所屬的類目,通常就是所在類的全名,如“iNotes.Default”;

l         %m 日誌的內容;

l         %l  輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。如write2database.main(write2database.java:33);

%n  輸出一個斷行符號分行符號,Windows平台為“\r\n”,Unix平台為“\n”

對於web網站的web.config檔案,需要如下配置,這部分是參考了cgq214 的Blog講到的寫法,同時根據實際效果作了點修正:

 配置:

<log4net>

<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">

                    <bufferSize value="10" />

                    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

                    <connectionString value="server=192.168.1.112;database=domino;uid=sa;pwd=;timeout=300;" />

                    <commandText value="INSERT INTO mail_web_log ([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="50" />

                        <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="200" />

                        <layout type="log4net.Layout.PatternLayout">

                            <conversionPattern value="%logger" />

                        </layout>

                    </parameter>

                    <parameter>

                        <parameterName value="@message" />

                        <dbType value="String" />

                        <size value="2000" />

                        <layout type="log4net.Layout.PatternLayout">

                            <conversionPattern value="%m" />

                        </layout>

                    </parameter>

                    <parameter>

                        <parameterName value="@exception" />

                        <dbType value="String" />

                        <size value="2000" />

                        <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"/>

        </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="RollingLogFileAppender"/>

            <appender-ref ref="ADONetAppender" />

        </logger>     </log4net>



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.