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/
水平有限難免有誤敬請指正