log4net 使用筆記

來源:互聯網
上載者:User

標籤:http   io   ar   使用   sp   strong   檔案   資料   div   

一、Log4net特徵

 

1、自訂日誌輸出層級

Log4net將日誌分為五個層級優先順序從高到低依次:FATAL > ERROR > WARN > INFO > DEBUG,此外還有ALL(允許所有的日誌請求)和OFF(拒絕所有的日誌請求)這兩種特殊的層級。可以通過記錄層級來控制日誌是否輸出。

如果你設定檔中定義的是INFO層級,程式中有三種日誌記錄方式

Log.Info(“日誌內容”),Log.Warn(“日誌內容”),Log.Debug(“日誌內容”)

則Log.Info,Log.Debug都會輸出日誌,Log.Warn不會輸出日誌。

2、自訂日誌輸出方式

Log4net的日誌輸出方式很靈活,可以將日誌輸出至文字檔,控制台,郵件,Windows Event Log,資料庫等等。對於寫日誌至文字檔還可以有如下非常靈活的配置。

a、按時間段列印日誌,按月,按日 ,按時,按分等隨你配置 b、按檔案的大小 列印滾動日誌,如每10M,100M一個記錄檔,這樣可以防止記錄檔不至於過大,記錄檔達到4,5G日後我們基本上就很難開啟了。 c、指定日誌大小,比如說指定500M,那麼日誌將只有一個且不會超出500M。

 

 

二、Log4net的安裝

 

1、使用者可以從 http://logging.apache.org/log4net/ 下載log4net的原始碼。

2、解壓軟體包後,在解壓的src目錄下將log4net.sln載入Visual Studio .NET,編譯後可以得到log4net.dll。

3、使用者要在自己的程式裡加入日誌功能,只需將log4net.dll引入工程即可。

 

三、在程式中使用log4net

 

1、log4net設定檔與程式的關聯

log4net的配置可以放在應用程式的預設設定檔中(app.config或web.config),也可以在自己指定的設定檔中。log4net架構中是使用log4net.Config.XmlConfigurator在程式集的層級上定義設定檔。

例如,找到當前項目的Assemblyinfo.cs檔案添加下面一行,將與Web.config檔案關聯起來

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

 

Assemblyinfo.cs配置說明

ConfigFile

指出了我們的設定檔的路徑及檔案名稱,包括副檔名。

ConfigFileExtension

如果我們對被編譯器的程式集使用了不同的副檔名,那麼我們需要定義這個屬性,預設的,程式集的設定檔副檔名為”config”。

Watch (Boolean屬性)

log4net架構用這個屬性來確定是否需要在運行時監視檔案的改變。如果這個屬性為true,那麼FileSystemWatcher將會被用來監視檔案的改變,重新命名,刪除等事件。

其中:ConfigFile和ConfigFileExtension屬性不能同時使用,ConfigFile指出了設定檔的名字

 

 

四、log4net的標準配置文檔樣本(web.config)

 

XML 代碼   複製
<?xmlversion="1.0"encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionname="log4net"
             type="log4net.Config.Log4NetConfigurationSectionHandler" />
  </configSections>
  <log4net>
    <root>
      <levelvalue="WARN" />
      <appender-refref="LogFileAppender" />
      <appender-refref="ConsoleAppender" />
    </root>
    <loggername="testApp.Logging">
      <levelvalue="DEBUG"/>
    </logger>
    <appendername="LogFileAppender"  type="log4net.Appender.FileAppender" >
      <paramname="File"value="log-file.txt" />
      <paramname="AppendToFile"value="true" />
      <layouttype="log4net.Layout.PatternLayout">
        <paramname="Header"value="[Header]&#13;&#10;"/>
        <paramname="Footer"value="[Footer]&#13;&#10;"/>
        <paramname="ConversionPattern"  value="%d [%t] %-5p %c[%x]  - %m%n" />
      </layout>
      <filtertype="log4net.Filter.LevelRangeFilter">
        <paramname="LevelMin"value="DEBUG" />
        <paramname="LevelMax"value="WARN" />
      </filter>
    </appender>
    <appendername="ConsoleAppender"   type="log4net.Appender.ConsoleAppender" >
      <layouttype="log4net.Layout.PatternLayout">
        <paramname="ConversionPattern"  value="%d [%t] %-5p %c [%x] -%m%n" />
      </layout>
    </appender>
  </log4net>
</configuration>

 

五、設定檔節點說明

 

1、在配置章節中,定義section節點。節點名稱為:須為log4net,且大小寫敏感。

         <configSections>

                    <sectionname="log4net"

                              type="log4net.Config.Log4NetConfigurationSectionHandler" />

         </configSections>

 

2、root節點說明  

 

(1)根logger,所有其它logger都預設繼承它。root元素沒有屬性。

 

2)支援的子項目

        appender-ref 0個或多個,要引用的appender的名字。

        level 最多一個。只有在這個層級或之上的事件才會被記錄。

        param 0個或多個,設定一些參數。        

     

(3)在<root>標籤裡,可以定義level層級值和Appender的列表。

        如果沒有定義LEVEL的值,則預設為DEBUG。可以通過<appender-ref>標籤定義日誌對象使用的Appender對象。<appender-ref>聲明了在其他地方定義的Appender對象的一個引用。在一個logger對象中的設定會覆蓋根日誌的設定。而對Appender屬性來說,子日誌對象則會繼承父日誌對象的Appender列表。這種預設的行為方式也可以通過顯式地設定<logger>標籤的additivity屬性為false而改變。 

 

3、Logger節點說明

 

(1)支援的屬性name,Additivity兩個屬性       

           name必須的,logger的名稱

          additivity 可選,取值是true或false,預設值是true。設定為false時將阻止父logger中的appender。

 

(2)支援的子項目

          appender-ref 0個或多個,要引用的appender的名字。

          evel最多一個。只有在這個層級或之上的事件才會被記錄。

          param 0個或多個,設定一些參數。

        

(3)<logger> 元素預定義了一個具體日誌對象的設定

        然後通過調用LogManager.GetLogger(“testAPP.Logging”)函數,你可以檢索具有該名字的日誌。如果LogManager.GetLogger(…)開啟的不是預定義的日誌對象,則該日誌對象會繼承根日誌對象的屬性。知道了這一點,我們可以說,其實<logger>標籤並不是必須的。

 

4、Appender節點說明

 

(1)定義日誌的輸出方式,只能作為 log4net 的子項目。name屬性必須唯一,type屬性必須指定。支援name,type兩個屬性。

           name 必須的,Appender對象的名稱

           type 必須的,Appender對象的輸出類型

 

(2)支援的子項目

           appender-ref 0個或多個,允許此appender引用其他appender,並不是所以appender類型都支援。

            filter 0個或多個,定義此app使用的過濾器。

            layout 最多一個。定義appender使用的輸出格式。

            param 0個或多個,設定Appender類中對應的屬性的值。

 

(3)在<root>標籤或單個的<logger>標籤裡的Appender對象可以用<appender>標籤定義

            <appender>標籤的基本形式如上面所示。它定義了appender的名字和類型。 另外比較重要的是<appender>標籤內部的其他標籤。不同的appender有不同的<param>標籤。在這裡,為了使用FileAppender,你需要一個檔案名稱作為參數。另外還需要一個在<appender>標籤內部定義一個Layout對象。Layout對象定義在它自己的<layout>標籤內。<layout>標籤的type屬性定義了Layout的類型(在本例裡是PatternLayout),同時也確定了需要提供的參數值。Header和Footer標籤提供了一個日誌會話(logging session)開始和結束時輸出的文字。有關每種appender的具體配置的例子,可以在log4net\doc\manual\example-config-appender.html中得到。

 

5、Filter節點說明

 

過濾器,只能作為<appender>的子項目。

支援的屬性:

            type 必須的,Filter的類型

            支援的子項目:param 0個或多個,設定一些參數。

 

6、Layout節點說明

        

布局,只能作為<appender>的子項目。

支援的屬性:

           type 必須的,Layout的類型

 

           支援的子項目:param 0個或多個。

 

log4net.Layout.PatternLayout中的轉換模式(ConversionPattern)

 

%m(message):輸出的日誌訊息,如ILog.Debug(…)輸出的一條訊息

%n(new line):換行

%d(datetime):輸出當前語句啟動並執行時刻

%r(run time):輸出程式從運行到執行到當前語句時消耗的毫秒數

%t(thread id):當前語句所在的線程ID

%p(priority): 日誌的當前優先順序別,即DEBUG、INFO、WARN…等

%c(class):當前日誌對象的名稱,例如:

%L:輸出語句所在的行號

%F:輸出語句所在的檔案名稱

%-數字:表示該項的最小長度,如果不夠,則用空格填充

 

例如

轉換模式為%r [%t]%-5p %c - %m%n 的 PatternLayout 將產生類似於以下內容的輸出:

176 [main] INFO  org.foo.Bar - Located nearest gas station.

 

7、Param

 

<param>元素可以是如何元素的子項目。

 

支援的屬性

         name 必須的,取值是父物件的參數名。

         value 可選的,value和type中,必須有一個屬性被指定。value是一個能被轉化為參數值的字串。

         type 可選的,value和type中,必須有一個屬性被指定。type是一個類型名,如果type不是在log4net程式集中定義的,就需要使用全名。

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.