Log4net使用

1、添加對log4net.dll的引用web

2、定義配置文件session

好處:app

  • 不須要從新編譯源代碼就能改變配置;

配置信息放置位置:框架

  • 在程序的配置文件裏,如AssemblyName.config 或web.config。
  • 在你本身的文件裏。文件名能夠是任何你想要的名字,如AppName.exe.xyz等

log4net框架會在相對於AppDomain.CurrentDomain.BaseDirectory 屬性定義的目錄路徑下查找配置文件。框架在配置文件裏要查找的惟一標識是<log4net>標籤。函數

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
    </configSections>
    <log4net>
        <root>
            <level value="WARN" />
            <appender-ref ref="LogFileAppender" />
            <appender-ref ref="ConsoleAppender" />
        </root>
        <logger name="testApp.Logging">
            <level value="DEBUG"/>
        </logger>
        <appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
            <param name="File" value="log-file.txt" />
            <param name="AppendToFile" value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <param name="Header" value="[Header]\r\n"/>
                <param name="Footer" value="[Footer]\r\n"/>
                <param name="ConversionPattern" value="%d [%t] %-5p %c [%x]  - %m%n"/>
            </layout>
            <filter type="log4net.Filter.LevelRangeFilter">
                <param name="LevelMin" value="DEBUG" />
                <param name="LevelMax" value="WARN" />
            </filter>
        </appender>
        <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
            <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
            </layout>
        </appender>
    </log4net>
</configuration>

2.1 <root>性能

<root>
    <level value="WARN" />
    <appender-ref ref="LogFileAppender" />
    <appender-ref ref="ConsoleAppender" />
</root>

  在框架的體系裏,全部的日誌對象都是根日誌(root logger)的後代。 所以若是一個日誌對象沒有在配置文件裏顯式定義,則框架使用根日誌中定義的屬性。spa

  <root>標籤裏,能夠定義level級別值和Appender的列表。若是沒有定義LEVEL的值,則缺省爲DEBUG。線程

  <appender-ref>標籤訂義日誌對象使用的Appender對象。<appender-ref>聲明瞭在其餘地方定義的Appender對象的一個引用。日誌

  在一個logger對象中的設置會覆蓋根日誌的設置。而對Appender屬性來講,子日誌對象則會繼承父日誌對象的Appender列表。這種缺省的行爲方式也能夠經過顯式地設定<logger>標籤的additivity屬性爲false而改變。code

<logger name="testApp.Logging"  additivity="false">
</logger>

2.2 <logger>

<logger name="testApp.Logging">
  <level value="DEBUG"/>
</logger>

  <logger> 元素預約義了一個具體日誌對象的設置。而後經過調用LogManager.GetLogger(「testAPP.Logging」)函數,你能夠檢索具備該名字的日誌。若是LogManager.GetLogger(…)打開的不是預約義的日誌對象,則該日誌對象會繼承根日誌對象的屬性。其實<logger>標籤並非必須的。

2.3 <appender>

  在<root>標籤或單個的<logger>標籤裏的Appender對象能夠用<appender>標籤訂義。<appender>標籤,它定義了appender的名字和類型。 另外比較重要的是<appender>標籤內部的其餘標籤。

  不一樣的appender有不一樣的<param>標籤。

  在這裏,爲了使用FileAppender,你須要一個文件名做爲參數。另外還須要一個在<appender>標籤內部定義一個Layout對象。Layout對象定義在它本身的<layout>標籤內。<layout>標籤的type屬性定義了Layout的類型(在本例裏是PatternLayout),同時也肯定了須要提供的參數值。Header和Footer標籤提供了一個日誌會話(logging session)開始和結束時輸出的文字。

2.4 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(line):輸出語句所在的行號
  • %F(file):輸出語句所在的文件名
  • %-數字:表示該項的最小長度,若是不夠,則用空格填充

2.5 <filter>

  它定義了應用到Appender對象的過濾器。本例中,咱們使用了LevelRangeFilter過濾器,它能夠只記錄LevelMin和LevelMax參數指定的日誌級別之間的日誌事件。能夠在一個Appender上定義多個過濾器(Filter),這些過濾器將會按照它們定義的順序對日誌事件進行過濾。其餘過濾器的有關信息能夠在log4net的SDK文檔中找到。

3、關聯配置文件

3.1 在程序集的級別上定義配置文件

  例如:能夠在項目的AssemblyInfo.cs文件裏添加如下的語句

  [assembly:log4net.Config.XmlConfigurator(ConfigFile="filename",ConfigFileExtension="ext",Watch=true/false)]

  • ConfigFile:指出了咱們的配置文件的路徑及文件名,包括擴展名。
  • ConfigFileExtension:若是咱們對被編譯程序的程序集使用了不一樣的文件擴展名,那麼咱們須要定義這個屬性,缺省的,程序集的配置文件擴展名爲」config」。
  • Watch (Boolean屬性):log4net框架用這個屬性來肯定是否須要在運行時監視文件的改變。若是這個屬性爲true,那麼FileSystemWatcher將會被用來監視文件的改變,重命名,刪除等事件。

  其中:ConfigFile和ConfigFileExtension屬性不能同時使用,ConfigFile指出了配置文件的名字,例如,ConfigFile=」Config.txt」

  ConfigFileExtension則是指明瞭和可執行程序集同名的配置文件的擴展名,例如,應用程序的名稱是」test.exe」,ConfigFileExtension=」txt」,則配置文件就應該是」test.exe.txt」 ;

  也能夠不帶參數應用XmlConfigurator():

  [assembly: log4net.Config.XmlConfigurator()]

3.2 在程序代碼中打開配置文件

  類的構造函數須要一個FileInfo對象做參數,以指出要打開的配置文件名。 這個方法和前面在程序集裏設置屬性打開一個配置文件的效果是同樣的。

  log4net.Config.XmlConfigurator.Configure(new FileInfo("TestLogger.Exe.Config"));

  XmlConfigurator 類還有一個方法ConfigureAndWatch(..), 用來配置框架並檢測文件的變化。

4、建立或獲取日誌對象

  日誌對象會使用在配置文件裏定義的屬性。若是某個日誌對象沒有事先在配置文件裏定義,那麼框架會根據繼承結構獲取祖先節點的屬性,最終的,會從根日誌獲取屬性。以下所示:

  Log4net.ILog log = Log4net.LogManager.GetLogger("MyLogger");

5、輸入日誌信息

  可使用ILog的幾種方法輸出日誌信息。你也能夠在調用某方法前先檢查IsXXXEnabled布爾變量,再決定是否調用輸出日誌信息的函數,這樣能夠提升程序的性能。由於框架在調用如ILog.Debug(…)這樣的函數時,也會先判斷是否知足Level日誌級別條件。

  if (log.IsDebugEnabled) log.Debug("message");

  if (log.IsInfoEnabled) log.Info("message);

相關文章
相關標籤/搜索