Log4net配置學習[轉載]

Log4net配置學習

Logger hierarchy
(層次級別)
Logger
都是已經命名的實體。Logger的名稱區分大小寫並遵循以下規則:
1
如果A logger的名稱如果是B logger名稱的前綴(通過“.”連接),則說A loggerB logger的祖父級。
2
如果A logger的名稱和B logger的名稱之間不存在其他的logger名稱,則A loggerB logger的父級。
例子:A logger名稱爲“Foo.Bar”B logger名稱爲“Foo.Bar.Baz”AB的父級。名稱爲“System”logger是名稱爲“System.Text.StringBuilder”的祖父級。
Root logger
位於logger層次級別中的頂級。它有例外的三條規則:
1 Root logger
總是存在的。
2 Root logger
不能通過名稱或取。
3 Root logger
有一個默認的Level 值爲 Debug
Logger
可以通過log4net.LogManager類的靜態方法GetLogger獲取。
Level
值:ALL/DEBUG/INFO/WARN/ERROR/FATAL/OFF
Level
繼承規則:如果一個logger沒有定義Level,它的Level值將從它的父級(定義了Level)繼承。
日誌紀錄請求通過調用logger實例的輸出方法實現。這些輸出方法有DebugInfoWarnErrorFatal
通過定義,輸出方法決定了日誌紀錄請求的Level。例如,log是一個logger實例,那麼語句log.Info(“..”)的日誌紀錄請求LevelINFO
如果日誌紀錄請求的Levellogger本身定義(或繼承)的Level高,則請求是可行的,否則不可行。
簡單規則:如果日誌記錄請求的LevelLlogger本身定義(或繼承)LevelK,當L>=K時,日誌紀錄請求是可行的。
Level
級別:DEBUG <INFO<WARN<ERROR<FATAL
通過名稱,調用log4net.LogManager.GetLogger方法,可以獲取同一個logger的實例引用。這樣在配置了一個logger後,不用在代碼中傳遞引用而可以獲取同一個logger的引用了。與生物上的親子關係(父親總是先於孩子)基本相反,在log4net 裏,logger可以被創建和配置成任何順序。特別的是,一個父級logger可能比子級logger後實例化,但卻可以在子級中查找到。
 
Appender
Log4net
允許日誌以不同的方式輸出,如:ms sql、文件、控制檯或者系統日誌等等。
一個logger可以有多個Appender。每一個可行的日誌紀錄請求將輸出到所有的appender,這些appender是在當前這個logger中引用的,還包括父級logger中引用的。換句話說,appender將在logger的層次級別中添加性的繼承。例如在root中定義了一個Console appender,那麼所有的logger至少有一個Console appender。如果 A logger有一個File appender,則 A logger以及它的子logger都有兩個appender
Additivity
屬性默認爲true,當設置爲false時,appender將採用覆蓋的方式,而不再從父級logger中繼承。
 
 
Filters
是用來過濾appender能接受的日誌信息。
使用以下filterappender只接受LevelINFOFATAL之間的日誌紀錄請求。
<filter type="log4net.Filter.LevelRangeFilter">
       <param name="LevelMin" value="INFO" />
       <param name="LevelMax" value="FATAL" />
</filter>
 
使用以下filterappender只接受包含子串爲“database”的日誌紀錄。
<filter type="log4net.Filter.StringMatchFilter">
       <param name="StringToMatch" value="database" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
第一個filter將會在日誌紀錄信息中查找“database”,如果找到則不再匹配下面得filterappener接受並紀錄該日誌。如果沒有找到則繼續使用第二個filter,該filter將拒絕任何日誌信息。
 
Layouts
用來定製輸出格式。
 
加載配置
ConfigFile
屬性:當我們自己定義了一個log4net的配置文件時,可以通過這個屬性來指定配置文件。
ConfigFileExtension
屬性:當應用程序會編譯成不同擴展名稱的程序集時,可以使用這個屬性。如Sample程序將編譯成Sample.exe,則ConfigFileExtension設置爲“config”,那麼所使用的配置文件名稱爲:Sample.exe.config。注意不能和ConfigFile屬性同時使用。
Watch
屬性:在運行期間是否監測配置文件。當值爲true時,FileSystemWatcher將用來監視配置文件的內容改變、重命名和刪除通知。
 
爲應用程序加載log4net的配置,可以通過在應用程序集中設置屬性。
例如:
[assembly: log4net.Config.DOMConfigurator(ConfigFile="Sample.config")]
[assembly: log4net.Config.DOMConfigurator(ConfigFileExtension="config")]
也可以不使用任何參數,這時將使用應用程序的配置文件。
[assembly: log4net.Config.DOMConfigurator()]
 
另一種方式是在代碼中使用 DOMConfigurator
log4net.Config.DOMConfigurator.Configure(
new FileInfo("TestLogger.Exe.Config"));
使用ConfigureAndWatch(..)可以指定一個配置文件並且監視該文件的變化。
 
PatternLayout
每一種指定的轉換符號都以%開始,後面跟着一個可選的格式符號和一個轉換符號。轉換符號用來指定輸出的數據類型,如Levelloggerdate等。
例如:轉換模型“%-5p [%t]: %m%n”
        ILog log = LogManager.GetLogger(typeof(TestApp));
        log.Debug("Message 1");
        log.Warn("Message 2");  
轉換後:
        DEBUG [main]: Message 1
        WARN  [main]: Message 2
“%-5p”
表示輸出日誌紀錄請求的Level值,寬度爲5個子符,並左對齊。
 
轉換符號列表:
a
輸出創建日誌的AppDomain的名稱
c
默認輸出logger的全名稱。後面可跟“{數字}”,則表示輸出與數字對應的logger名稱級別(從右邊開始)。如全名爲“a.b.c”“%c{2}”輸出“b.c”
C
輸出調用日誌紀錄請求的類名。後面可跟“{數字}”,表示輸出與數字對應的類名稱(包含命名空間,從右邊開始)。
d
輸出日誌記錄時間,後可跟“{時間格式}”。默認爲yyyy-MM-dd HH:mm:ss,fff
F
輸出調用日誌紀錄請求的文件全名。(會影響速度)
l
輸出調用日誌紀錄請求的一些本地信息。如類和成員名,調用文件和調用聲明的代碼行數。(極其影響性能)
L
輸出調用日誌紀錄請求的聲明代碼行數。(極其影響性能)
m
輸出應用程序所要輸出的信息。
M
輸出調用日誌紀錄請求的成員名稱。(極其影響性能)
n
輸出換行符號
p
輸出日誌請求的Level
P
 
r
輸出從應用程序啓動開始到日誌紀錄請求的時間(毫秒)
t
輸出產生日誌的線程名稱,如果沒有名稱則輸出線程的編號
u
輸出當前活動用戶的名稱。(Principal.Identity.Name
W
輸出當前活動用戶的windows標識。
x
 
X
 
%
輸出一個%
 
發佈了16 篇原創文章 · 獲贊 1 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章