注銷

          注銷

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

          Logger hierarchy (層次級別)

          Logger 都是已經(jīng)命名的實體。 Logger 的名稱區(qū)分大小寫并遵循以下規(guī)則:

          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 層次級別中的頂級。它有例外的三條規(guī)則:

          1 Root logger 總是存在的。

          2 Root logger 不能通過名稱或取。

          3 Root logger 有一個默認(rèn)的 Level 值為 Debug

          Logger 可以通過 log4net.LogManager 類的靜態(tài)方法 GetLogger 獲取。

          Level 值: ALL/DEBUG/INFO/WARN/ERROR/FATAL/OFF

          Level 繼承規(guī)則:如果一個 logger 沒有定義 Level ,它的 Level 值將從它的父級(定義了 Level )繼承。

          日志紀(jì)錄請求通過調(diào)用 logger 實例的輸出方法實現(xiàn)。這些輸出方法有 Debug Info Warn Error Fatal

          通過定義,輸出方法決定了日志紀(jì)錄請求的 Level 。例如, log 是一個 logger 實例,那么語句 log.Info(“..”) 的日志紀(jì)錄請求 Level INFO

          如果日志紀(jì)錄請求的 Level logger 本身定義(或繼承)的 Level 高,則請求是可行的,否則不可行。

          簡單規(guī)則:如果日志記錄請求的 Level L logger 本身定義(或繼承) Level K ,當(dāng) L>=K 時,日志紀(jì)錄請求是可行的。

          Level 級別: DEBUG <INFO<WARN<ERROR<FATAL

          通過名稱,調(diào)用 log4net.LogManager.GetLogger 方法,可以獲取同一個 logger 的實例引用。這樣在配置了一個 logger 后,不用在代碼中傳遞引用而可以獲取同一個 logger 的引用了。與生物上的親子關(guān)系(父親總是先于孩子)基本相反,在 log4net 里, logger 可以被創(chuàng)建和配置成任何順序。特別的是,一個父級 logger 可能比子級 logger 后實例化,但卻可以在子級中查找到。

          ?

          Appender

          Log4net 允許日志以不同的方式輸出,如: ms sql 、文件、控制臺或者系統(tǒng)日志等等。

          一個 logger 可以有多個 Appender 。每一個可行的日志紀(jì)錄請求將輸出到所有的 appender ,這些 appender 是在當(dāng)前這個 logger 中引用的,還包括父級 logger 中引用的。換句話說, appender 將在 logger 的層次級別中添加性的繼承。例如在 root 中定義了一個 Console appender ,那么所有的 logger 至少有一個 Console appender 。如果 A logger 有一個 File appender ,則 A logger 以及它的子 logger 都有兩個 appender

          Additivity 屬性默認(rèn)為 true ,當(dāng)設(shè)置為 false 時, appender 將采用覆蓋的方式,而不再從父級 logger 中繼承。

          ?

          ?

          Filters 是用來過濾 appender 能接受的日志信息。

          使用以下 filter appender 只接受 Level INFO FATAL 之間的日志紀(jì)錄請求。

          <filter type="log4net.Filter.LevelRangeFilter">

          ?????? <param name="LevelMin" value="INFO" />

          ?????? <param name="LevelMax" value="FATAL" />

          </filter>

          ?

          使用以下 filter appender 只接受包含子串為“ database ”的日志紀(jì)錄。

          <filter type="log4net.Filter.StringMatchFilter">

          ?????? <param name="StringToMatch" value="database" />

          </filter>

          <filter type="log4net.Filter.DenyAllFilter" />

          第一個 filter 將會在日志紀(jì)錄信息中查找“ database ”,如果找到則不再匹配下面得 filter appener 接受并紀(jì)錄該日志。如果沒有找到則繼續(xù)使用第二個 filter ,該 filter 將拒絕任何日志信息。

          ?

          Layouts 用來定制輸出格式。

          ?

          加載配置

          ConfigFile 屬性:當(dāng)我們自己定義了一個 log4net 的配置文件時,可以通過這個屬性來指定配置文件。

          ConfigFileExtension 屬性:當(dāng)應(yīng)用程序會編譯成不同擴(kuò)展名稱的程序集時,可以使用這個屬性。如 Sample 程序?qū)⒕幾g成 Sample.exe ,則 ConfigFileExtension 設(shè)置為“ config ”,那么所使用的配置文件名稱為: Sample.exe.config 。注意不能和 ConfigFile 屬性同時使用。

          Watch 屬性:在運行期間是否監(jiān)測配置文件。當(dāng)值為 true 時, FileSystemWatcher 將用來監(jiān)視配置文件的內(nèi)容改變、重命名和刪除通知。

          ?

          為應(yīng)用程序加載 log4net 的配置,可以通過在應(yīng)用程序集中設(shè)置屬性。

          例如:

          [assembly: log4net.Config.DOMConfigurator(ConfigFile="Sample.config")]

          [assembly: log4net.Config.DOMConfigurator(ConfigFileExtension="config")]

          也可以不使用任何參數(shù),這時將使用應(yīng)用程序的配置文件。

          [assembly: log4net.Config.DOMConfigurator()]

          ?

          另一種方式是在代碼中使用 DOMConfigurator

          log4net.Config.DOMConfigurator.Configure(

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

          使用 ConfigureAndWatch(..) 可以指定一個配置文件并且監(jiān)視該文件的變化。

          												
          														
          																
          																		?
          																
          														
          												
          										

          PatternLayout

          每一種指定的轉(zhuǎn)換符號都以 % 開始,后面跟著一個可選的格式符號和一個轉(zhuǎn)換符號。轉(zhuǎn)換符號用來指定輸出的數(shù)據(jù)類型,如 Level logger date 等。

          例如:轉(zhuǎn)換模型“ %-5p [%t]: %m%n

          ?????? ?ILog log = LogManager.GetLogger(typeof(TestApp));

          ?????? ?log.Debug("Message 1");

          ?????? ?log.Warn("Message 2");??

          轉(zhuǎn)換后:

          ?????? ?DEBUG [main]: Message 1

          ?????? ?WARN? [main]: Message 2

          %-5p ”表示輸出日志紀(jì)錄請求的 Level 值,寬度為 5 個子符,并左對齊。

          ?

          轉(zhuǎn)換符號列表:

          a

          輸出創(chuàng)建日志的 AppDomain 的名稱

          c

          默認(rèn)輸出 logger 的全名稱。后面可跟“ { 數(shù)字 } ”,則表示輸出與數(shù)字對應(yīng)的 logger 名稱級別(從右邊開始)。如全名為“ a.b.c ”,“ %c{2} ”輸出“ b.c

          C

          輸出調(diào)用日志紀(jì)錄請求的類名。后面可跟“ { 數(shù)字 } ”,表示輸出與數(shù)字對應(yīng)的類名稱(包含命名空間,從右邊開始)。

          d

          輸出日志記錄時間,后可跟“ { 時間格式 } ”。默認(rèn)為 yyyy-MM-dd HH:mm:ss,fff

          F

          輸出調(diào)用日志紀(jì)錄請求的文件全名。(會影響速度)

          l

          輸出調(diào)用日志紀(jì)錄請求的一些本地信息。如類和成員名,調(diào)用文件和調(diào)用聲明的代碼行數(shù)。(極其影響性能)

          L

          輸出調(diào)用日志紀(jì)錄請求的聲明代碼行數(shù)。(極其影響性能)

          m

          輸出應(yīng)用程序所要輸出的信息。

          M

          輸出調(diào)用日志紀(jì)錄請求的成員名稱。(極其影響性能)

          n

          輸出換行符號

          p

          輸出日志請求的 Level

          P

          ?

          r

          輸出從應(yīng)用程序啟動開始到日志紀(jì)錄請求的時間(毫秒)

          t

          輸出產(chǎn)生日志的線程名稱,如果沒有名稱則輸出線程的編號

          u

          輸出當(dāng)前活動用戶的名稱。( Principal.Identity.Name

          W

          輸出當(dāng)前活動用戶的 windows 標(biāo)識。

          x

          ?

          X

          ?

          %

          輸出一個 %


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

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 淅川县| 兴化市| 绥棱县| 株洲县| 繁峙县| 乐至县| 雷波县| 宁明县| 新郑市| 福贡县| 深水埗区| 沅江市| 扶沟县| 日照市| 宣汉县| 陆河县| 广饶县| 本溪市| 麦盖提县| 汝阳县| 馆陶县| 渭南市| 黎川县| 宁夏| 靖江市| 河北省| 英德市| 洛川县| 宽城| 芜湖县| 安龙县| 太原市| 伊金霍洛旗| 化州市| 承德县| 印江| 尼玛县| 金阳县| 上林县| 大余县| 瑞金市|