標籤: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] "/>
<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程式集中定義的,就需要使用全名。
log4net 使用筆記