一、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)
<?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] "/>
<paramname="Footer"value="[Footer] "/>
<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程序集中定義的,就需要使用全名。
新聞熱點
疑難解答