Logger hierarchy (層次級別) Logger 都是已經命名的實體。 Logger 的名稱區分大小寫并遵循以下規則: 1 如果 A logger 的名稱如果是 B logger 名稱的前綴(通過“ . ”連接),則說 A logger 是 B logger 的祖父級。 2 如果 A logger 的名稱和 B logger 的名稱之間不存在其他的 logger 名稱,則 A logger 是 B logger 的父級。 例子: A logger 名稱為“ Foo.Bar ”, B logger 名稱為“ Foo.Bar.Baz ”, A 為 B 的父級。名稱為“ 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 實例的輸出方法實現。這些輸出方法有 Debug , Info , Warn , Error 和 Fatal 。 通過定義,輸出方法決定了日志紀錄請求的 Level 。例如, log 是一個 logger 實例,那么語句 log.Info(“..”) 的日志紀錄請求 Level 為 INFO 。 如果日志紀錄請求的 Level 比 logger 本身定義(或繼承)的 Level 高,則請求是可行的,否則不可行。 簡單規則:如果日志記錄請求的 Level 為 L , logger 本身定義(或繼承) Level 為 K ,當 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 能接受的日志信息。 使用以下 filter 的 appender 只接受 Level 從 INFO 到 FATAL 之間的日志紀錄請求。 <filter type="log4net.Filter.LevelRangeFilter"> ?????? <param name="LevelMin" value="INFO" /> ?????? <param name="LevelMax" value="FATAL" /> </filter>
使用以下 filter 的 appender 只接受包含子串為“ database ”的日志紀錄。 <filter type="log4net.Filter.StringMatchFilter"> ?????? <param name="StringToMatch" value="database" /> </filter> <filter type="log4net.Filter.DenyAllFilter" /> 第一個 filter 將會在日志紀錄信息中查找“ database ”,如果找到則不再匹配下面得 filter , appener 接受并紀錄該日志。如果沒有找到則繼續使用第二個 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 類
使用
ConfigureAndWatch(..)
可以指定一個配置文件并且監視該文件的變化。
PatternLayout 每一種指定的轉換符號都以 % 開始,后面跟著一個可選的格式符號和一個轉換符號。轉換符號用來指定輸出的數據類型,如 Level , logger , date 等。 例如:轉換模型“ %-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 個子符,并左對齊。
轉換符號列表:
|