2012年9月1日 星期六

[C#] log4net 教學及使用範例(一)


  1. 功能簡介
    :這裡講的log4net是一個很好用的open source code的組件。可以把你想輸出的log以不同的 格式輸出到不同的媒介
  2. 用途:主要用途當然就是要讓自己能夠在第一時間能夠很快又方便的找到Bug或者是自己想看的資訊。
  3. Log的分級:總共分成七級( 但實際可以在程式碼被呼叫的只有2-6級 )
    1. OFF - nothing gets logged (cannot be called)
    2. FATAL。
    3. ERROR
    4. WARN
    5. INFO
    6. DEBUG
    7. ALL - everything gets logged (cannot be called)
  4. 組態設定
    1. Root :
          所有的Log都繼承自root,所以預設的level為INFO,表示DEBUG層級的資訊預設

      <root>
            <level value="INFO" />
            <appender-ref ref="RollingFileAppender" />
            <appender-ref ref="SmtpAppender" />
            <appender-ref ref="ConsoleAppender" />
      </root>
      
    2. ConfigSections:
          這個標籤要放在 <configuration> 標籤下的第一個位置,不然會出錯。
      <configSections>
          <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
        </configSections>
    3. Appender:
       指定要用那一種方式寫入Log。下面的例子便是把Log輸出到Console的表示法。
      <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      
    4. Layout:
          Log輸出的格式。
      <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="Date:%d%nThreadID:%t%nLevel:%level%nLogger:%logger%nLine:%l%nMessage:%message%nException:%exception%n%n" />
            </layout>
      
    5. Conversion Pattern:
          把Value的值轉換成Log資料。Value中的變數如下:

          %m(message):輸出的Log訊息,如ILog.Debug(message)輸出的一條消息
          %n(new line):換行
          %d(datetime):輸出當前语句運行的時間
          %r(run time):輸出程序從運行到執行到當前語句時消耗的毫秒數
          %t(thread id):當前語句所在的執行序ID
          %p(priority): 日志的當前優先級别,即DEBUG、INFO、WARN…等
          %level:錯誤層級
          %c(class):當前Log對象的名稱
          %L(line):輸出語句所在的行號
          %F(file):輸出語句所在的文件名
          %-數字:表示該項的最小長度,如果不夠,則用空格填充
    6. Filters
          用來過濾Log,過濾方式可依照Log level 或依Log字串....等等方式。
          (注意:
       filter的條件一定要在layout之後才有作用 )
          過濾的方式如下:
      1. StringMatchFilter
      2. LevelRangeFilter
      3. LevelMatchFilter
      4. DenyAllFilter
  5. 以下為一個簡單的組態設定的寫法,下次有空時再補上其它資料:
    <?xml version="1.0"?>
    <configuration>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
      </configSections>
      <log4net>
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="LogName:%c%nLevel:%level%nData:%date%nThreadID:%thread%nMSG:%message%nEX:%exception%n%n" />
          </layout>
          <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="WARN"/>
            <levelMax value="FATAL"/>
          </filter>
     </log4net>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
      </startup>
      <system.web>
        <membership defaultProvider="ClientAuthenticationMembershipProvider">
          <providers>
            <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
          </providers>
        </membership>
        <roleManager defaultProvider="ClientRoleProvider" enabled="true">
          <providers>
            <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
          </providers>
        </roleManager>
      </system.web>
    </configuration>
    










沒有留言:

張貼留言