Log4net配置與使用簡要說明


log4net詳細配置:
http://logging.apache.org/log4net/
本文描述如有錯誤,以官網的說明為准;p

一:先來看看log4net中的幾個概念:


1. log4net繼承機制


log4net通過logger的名字與"."符號來體現繼承層次,類似於c#的命名空間,例如:

var loggerA=LogManager.GetLogger("a");
var loggerB=LogManager.GetLogger("a.b");

那么,loggerB繼承了loggerA,如果沒有為loggerB指定appender或者level,將會使用loggerB的appender或者level. by the way,另一個獲取logger的方法:GetLogger(typeof(SomeClass))會新建一個名為"SomeClass"的logger

2. appender

appender:負責將log寫入何處。log4net中內置了很多種appnder:
FileAppender:將log寫入文件中。
RollingFileAppender:將log寫入到文件中,並可以按某些條件(例如按日期或者按文件大小)來划分不同文件,例如希望每天一個log文件,或者每個文件1M等等。
AdoNetAppender:將log通過ado.net寫入到數據庫。
ConsoleAppender:將log輸出到console中。
log4net中內置了非常多的appender,詳細請參考:
http://logging.apache.org/log4net/release/manual/introduction.html

3. Level

level是指日志級別,日志級別從低到高分為:
ALL
DEBUG --調試
INFO --信息
WARN --警告
ERROR --錯誤
FATAL --致命
OFF

一個logger只會記錄級別比這個logger設定的級別要大的log,例如,一個logger的級別為ERROR(如何設定logger的日志級別會在下面提及),當 logger.Info("this's a log of info level")時,log將不會被記錄,因為logger以Info()方法記錄該log,意味着該log的級別是INFO,但logger的級別是ERROR,大於INFO,所以不會記錄該log。但logger.Error("this's a log of error level")或者logger.Fatal("this's a log of fatal level")時,則會記錄該log。

4. Filter

filter代表appender的過濾器,可以設置appender以某種方式過濾(不記錄)日志。例如,LevelMatchFilter用於設定只記錄某個級別的日志,StringMatchFilter用於設定只記錄日志里包含某些字眼的日志。
如何設置Filter將會在下面提及,但更多的Filter用法請參考:http://logging.apache.org/log4net/release/manual/configuration.html

5. Layout

layout用於設置日志的排版格式。(這個通常用默認的,比較少自己配置,不懂~ 具體請看:http://logging.apache.org/log4net/release/manual/configuration.html


二: 如何配置log4net

log4net支持在代碼中設定logger(appender,level,filter等),但推薦通過配置文件來進行配置。
配置文件的方式也分為2種:

1.在項目的配置文件中(web.config,app.config)中添加配置節來實現

2.指定一個獨立的配置文件的方式來配置。

在項目配置文件中進行配置和使用步驟:

a.先在項目配置文件中定義一個配置節:

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


b.然后在項目配置文件中添加"log4net"配置節:
 

<log4net>
    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Log\\LogError\\" />
      <param name="AppendToFile" value="true" />
      <param name="MaxSizeRollBackups" value="100" />
        <param name="ConversionPattern" value="%n異常時間:%d [%t] %n異常級別:%-5p %n異 常 類:%c [%x] %n%m %n " />
      </layout>
    </appender>
    <root>
      <level value="ERROR" />
      <appender-ref ref="ErrorAppender" />
    </root>
  </log4net>


c.調用 XmlConfigurator.Configure()方法啟用配置,或者使用[assembly: log4net.Config.XmlConfigurator()] 特性來啟用配置(log4net推薦使用程序集特性的方式來進行配置。只需要在項目的Properties/AssemblyInfo.cs中添加該程序集特性即可)

 指定一個獨立的配置文件步驟:

a.在項目根目錄中(根目錄是默認位置,但可以指定其他位置,這里不作說明;p)新建一個任意文件名的xml文件,例如"log4net.config"。
b.在該xml文件中進行配置,xml文件的內容和上一種配置方式的log4net配置節一樣,只是單獨放到一個xml文件中而已。
c.調用XmlConfigurator.ConfigureAndWatch()方法啟用配置,或者使用[assembly: log4net.Config.XmlConfigurator()] 特性來啟用配置。

三:配置文件大概解釋(只是常用的,大概的描述,具體的請參考官網)

<log4net>
  <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Log\\LogError\\" /> <!--基於應用的根目錄-->
    <param name="AppendToFile" value="true" />
    <param name="MaxSizeRollBackups" value="100" />
    <param name="MaxFileSize" value="10240" />
    <param name="StaticLogFileName" value="false" />
    <param name="DatePattern" value="yyyy-MM-dd.log" /><!--日志文件的風格,例如這個就是'2017-02-21.log'-->
    <param name="RollingStyle" value="Date" />
    <param name="Encoding" value="UTF-8" />
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%n異常時間:%d [%t] %n異常級別:%-5p %n異 常 類:%c [%x] %n%m %n " /><!--日志內容的顯示排版風格,但不好意思,各個參數我也沒去研究是什么意思,我自己都是用慣這樣的排版-->
    </layout>
  </appender>
  <appender name="MyConsoleAppender" type="log4net.Appender.ConsoleAppender" ><!--這里定義一個名叫"MyConsoleAppender"的,類型為ConsoleAppender的appender,可以被下邊的logger所使用-->
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
    </layout>
  <filter type="log4net.Filter.StringMatchFilter"><!--過濾器,匹配包含某些字符的log-->
    <stringToMatch value="stringToMatch" />
  </filter>
  </appender>
  <root><!--設定log4net繼承層次中的根logger,相似於c#中的object,所有的logger會繼承root的配置-->
    <level value="INFO" />
    <appender-ref ref="ConsoleAppender" /><!--指定根logger默認使用"MyConsoleAppender"-->
  </root>
  <logger name="SomeLoggerFoo"><!--未某個具體名字的logger進行配置,例如在代碼中 LogManager.GetLogger("SomeLoggerFoo"),那么該logger就會使用這個配置-->
      <level value="INFO" />
      <appender-ref ref="ConsoleAppender" /> <!--指定使用哪個appnder-->
    </logger>
  <logger name="myErrorAppender">
    <level value="ERROR" />
    <appender-ref ref="ErrorAppender" />
  </logger>
</log4net>

 

以上是log4net比較粗略的配置和使用說明,如果需要更詳細的信息,請參考log4net官網:

http://logging.apache.org/log4net/

水平有限難免有誤敬請指正




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM