注銷

          注銷

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            112 隨筆 :: 7 文章 :: 18 評論 :: 0 Trackbacks

          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

          log4net.Config.DOMConfigurator.Configure(

          new FileInfo("TestLogger.Exe.Config"));

          使用 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 個子符,并左對齊。

          ?

          轉換符號列表:

          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

          ?

          %

          輸出一個 %


          posted on 2006-12-19 10:02 注銷..... 閱讀(426) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 津市市| 资溪县| 孟津县| 固镇县| 项城市| 渭源县| 九龙坡区| 吉林市| 庆城县| 新和县| 梅河口市| 岱山县| 休宁县| 诏安县| 普陀区| 财经| 博乐市| 宜良县| 丹巴县| 正阳县| 平湖市| 玉田县| 额敏县| 漳平市| 涞水县| 金沙县| 凤台县| 宁陕县| 固镇县| 合江县| 平陆县| 余干县| 秦安县| 克拉玛依市| 尤溪县| 吉水县| 南充市| 萨嘎县| 侯马市| 翁牛特旗| 牡丹江市|