2015年5月21日 星期四

Log4Net記錄log除錯方式(MS-SQL)

Log4Net的前身原本Java的Log4J,此為簡易的記錄日誌管理器
套用的方式有幾個步驟需要說明
1、調整AssemblyInfo.cs檔
新增以下一行

[assembly: log4net.Config.DOMConfigurator()]

2、建立資料庫

CREATE TABLE [dbo].[Log] (
    [Id] [int] IDENTITY (1, 1) NOT NULL,
    [Date] [datetime] NOT NULL,
    [Thread] [varchar] (255) NOT NULL,
    [Level] [varchar] (50) NOT NULL,
    [Logger] [varchar] (255) NOT NULL,
    [Message] [varchar] (4000) NOT NULL,
    [Exception] [varchar] (2000) NULL
)
3、在App.config或web.config上加上下列字段
加在

  <configsections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net">
  </section></configsections>
  <log4net>

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="LogFiles/"> <!--存放log檔案的路徑-->
      <staticlogfilename value="false">
      <appendtofile value="true">
      <rollingstyle value="Date">
      <datepattern value="yyyyMMdd.lo\g"> <!--log檔案的命名-->
      <layout type="log4net.Layout.PatternLayout">
        <conversionpattern value="%-5p %date{yyyy/MM/dd HH:mm:ss} %-20c{1} %-20M %m%n">
      </conversionpattern></layout>
    </datepattern></rollingstyle></appendtofile></staticlogfilename></file></appender>

    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
      <buffersize value="2">
      <connectiontype value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <connectionstring value="data source=[Your IP Address];initial catalog=[DataBaseName];integrated security=false;persist security info=True;User ID=[login name];Password=[password]">
      <commandtext value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)">
      <parameter>
        <parametername value="@log_date">
        <dbtype value="DateTime">
        <layout type="log4net.Layout.RawTimeStampLayout">
      </layout></dbtype></parametername></parameter>
      <parameter>
        <parametername value="@thread">
        <dbtype value="String">
        <size value="255">
        <layout type="log4net.Layout.PatternLayout">
          <conversionpattern value="%thread">
        </conversionpattern></layout>
      </size></dbtype></parametername></parameter>
      <parameter>
        <parametername value="@log_level">
        <dbtype value="String">
        <size value="50">
        <layout type="log4net.Layout.PatternLayout">
          <conversionpattern value="%level">
        </conversionpattern></layout>
      </size></dbtype></parametername></parameter>
      <parameter>
        <parametername value="@logger">
        <dbtype value="String">
        <size value="255">
        <layout type="log4net.Layout.PatternLayout">
          <conversionpattern value="%logger">
        </conversionpattern></layout>
      </size></dbtype></parametername></parameter>
      <parameter>
        <parametername value="@message">
        <dbtype value="String">
        <size value="4000">
        <layout type="log4net.Layout.PatternLayout">
          <conversionpattern value="%message">
        </conversionpattern></layout>
      </size></dbtype></parametername></parameter>
      <parameter>
        <parametername value="@exception">
        <dbtype value="String">
        <size value="2000">
        <layout type="log4net.Layout.ExceptionLayout">
      </layout></size></dbtype></parametername></parameter>
    </commandtext></connectionstring></connectiontype></buffersize></appender>
    
    <root>
      <level value="ALL">
      <appender-ref ref="AdoNetAppender">
    </appender-ref></level></root>


    <logger name="WebForm1">

      <level value="INFO">

      <appender-ref ref="RollingFileAppender">

    </appender-ref></level></logger>

  </log4net>  

在此用了2種appender,一個是直接記錄在文字檔內,即為name=RollingFileAppender的appender,另一個為將log記錄在SQL Server上,即為AdoNetAppender的appender。

而xml裡的<root></root>即為系統內預設的LogManager,若要使用別的LogManager,則用 <logger name=""></logger>的方式,使用方式在下面進行說明。
4、 在cs部步,則加上下面部份

    public partial class LoginPage
    {
        //使用LogManager預設的Log, 記錄Log在資料庫內
        public static readonly ILog TxtLog1 = LogManager.GetLogger(typeof(LoginPage));
        //使用Log Name為WebForm1的Log,記錄Log在文字檔內
        public static readonly ILog TxtLog2 = LogManager.GetLogger("WebForm1");
        protected void Page_Load(object sender, EventArgs e)
        {
            TxtLog1.Info("DB Log:Start");
            TxtLog2.Warn("File Log:Start");        
        }
    }

這樣即可進行Log記錄

沒有留言:

張貼留言