夢想號黃包車wei.lee net-home

          Have my best life at SZ....................

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

          ???? 日志部分在程序中占了4%,有利于幫助我們很快地得到我們需要的調(diào)試信息,找到問題的根源盡快解決問題,從而降低我們的維護成本。這幾天一直斷斷續(xù)續(xù)地學(xué)習(xí)Log4net部分,由于知道自己在一個比較長的時間必須去使用.net的部分(HA Project and LIS Project),沒辦法,只有硬著頭皮死肯:),不過也讓我見識不少呢!log4net是appache開源的一個杰作,和log4J很相象,如同孿生的兄弟一樣,基本的概念原理都是一樣的,她主要應(yīng)用在.net上的。下面是我一些收集的資料,同時也是我在開發(fā)過程中的一些經(jīng)驗總結(jié)。稍后也會把一些實際項目的經(jīng)驗記錄下來,和使用Log4J的相關(guān)內(nèi)容。

          Log4net
          主要有四個組件。分別是Logger(記錄器),Repository()Appender(附著器)Layout(布局)。??

          Logger 定義與用途:

          Logger 是應(yīng)用程序需要交互的主要組件,它用來產(chǎn)生日志消息。產(chǎn)生的日志消息并不直接顯示,還要預(yù)先經(jīng)過 Layout 的格式化處理后才會輸出。

          Root 是一個默認(rèn)的 Logger ,當(dāng)一個 root Logger 內(nèi)容配置一致的時候就會記錄兩條相同的記錄,當(dāng)在配置文件中找不到 logger 的名字時候,就會使用root的配置。?
          ?

          Repository 定義與用途:

          Repository 主要用于負(fù)責(zé)日志對象組織結(jié)構(gòu)的維護?,F(xiàn)在 已經(jīng)使用LogManager類來維護日志對象組織。

          ?

          Appender 定義及用途:

          ?? 定義輸出介質(zhì),可以把多個 Aappender 附加到一個日志對象中,?一個Appender對象缺省地把所有的日志事件傳遞到輸出流中,我們可以通過Aappender Filters來過濾剩下我們需要的部分。分別有級別過濾(定義級別區(qū)間),字符串過濾,可以定義多個filter。such as :LevelMatchFilter、LevelRangeFilter、MDCFilter、NDCFilter、 StringMatchFilter.

          ?

          Layout 定義與用途

          Layout 組件用于向用戶顯示最后經(jīng)過格式化的輸出信息??梢允蔷€性的或一個 XML 文件。 Layout 組件和一個 Appender 組件一起工作。也就是說一個 appender 對象 只能對應(yīng)一個 layout 對象。

          ?

          ?

          Log4net DEBUG 信息分級:

          一共有七級

          級別
          允許方法

          Boolean 屬性

          優(yōu)先級別

          ?

          OFF (拒絕所有的日志請求) ???????????????????? FATAL???????????????????????????????????? ERROR??

          ? null?????????????????????????????????????????????????????????????????? ?void Fatal(...);??????????????????????????? void Error(...);

          ? null??????????????????????????????????????????????????????????????? ??? bool IsFatalEnabled;????????????????? bool IsErrorEnabled;?

          ?Highest????????????????????????????????????????????????????????????? second?????????????????????????????????????? three

          ?

          ?WARN???????????????????????????????????????????????????????????? INFO????????????????????????????????????????DEBUG

          void Warn(...);??????????????????????????????????????????????????? void Info(...);?????????????????????????????void Debug(...);

          bool IsWarnEnabled;? ????????????????????????????????????????bool IsInfoEnabled;???????????????????bool IsDebugEnabled;

          four????????????????????????????????????????????????????????????????????five???????????????????????????????????????????six

          ?

          ALL (允許所有的日志請求)

          ?Null

          ?Null

          ?Lowest

          ?

          Log4net 配置方式:

          1. 在單獨文件里配置(推薦):改變配置不需要重新編譯代碼,同時也可以在程序運行的過程中修改代碼。

          2. 在程序代碼中配置

          ?

          關(guān)聯(lián)配置文件:

          log4net 框架使用 log4net.Config.DOMConfiguratorAttribute log4net.Config.XmlConfigurator 在程序集的級別上定義配置文件。方法有多種的:
          1
          .可以在項目的 AssemblyInfo.cs 文件里添加以下的語句

          ? [assembly:log4net.Config.XmlConfigurator(ConfigFile="filename", ? ConfigFileExtension="ext",Watch=true/false)]

          其中 configFile 設(shè)定了配置文件的文件名,路徑,擴展名

          configFileExtension 設(shè)定了被編譯的文件使用擴展名字,默認(rèn)為 config

          但是configFileExtension與configFile不能同時使用。在這里我們可以關(guān)聯(lián)我們手動配置的文件,而不使用.net給我們的應(yīng)用程序配置文件。
          eg:
          [assembly:log4net.Config.DOMConfigurator(ConfigFile="/Projects/Regular/bin/config/App.log.conf.xml",Watch=true)]?

          2 .可以不帶參數(shù)應(yīng)用 DOMConfiguratio():

          ?

          ?[assembly: log4net.Config.DOMConfigurator()]

          3. 也可以在程序代碼中用 DOMConfigurator 類打開配置文件。類的構(gòu)造函數(shù)需要一個 FileInfo 對象作參數(shù),以指出要打開的配置文件名。

          log4net.Config.DOMConfigurator.Configure(

          ?

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

          ?

          創(chuàng)建日志對象:

          當(dāng)日志對象沒有在配置文件中定義的話,就會使用 root 的祖父節(jié)點。

          Log4net.ILog log = Log4net.LogManager.GetLogger("MyLogger");

          ?

          輸出日志信息:

          可以使用輸出日志的幾種方式:fatal();error();warn();info();debug();

          if (log.IsDebugEnabled) log.Debug("message");

          ?

          ?

          DEBUG 輸出格式的意義:

          Eg

          <param name="ConversionPattern"

          ?? value="%d [%t] %-5p %c [%x] - %m%n"

          ??????? />

          %m(message): 輸出的日志消息,如 ILog.Debug( ) 輸出的一條消息

          %n(new line): 換行

          %d(datetime): 輸出當(dāng)前語句運行的時刻

          %r(run time): 輸出程序從運行到執(zhí)行到當(dāng)前語句時消耗的毫秒數(shù)

          %t(thread id): 當(dāng)前語句所在的線程 ID

          %p(priority): 日志的當(dāng)前優(yōu)先級別,即 DEBUG INFO 、 WARN …等

          %c(class): 當(dāng)前日志對象的名稱,例如:

          ?????? 模式字符串為: %-10c -%m%n

          ?????? 代碼為:

          ILog log=LogManager.GetLogger(“Exam.Log”);

          log.Debug(“Hello”);

          ??? 則輸出為下面的形式:

          Exam.Log?????? - Hello

          %L :輸出語句所在的行號 。包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。

          %F :輸出語句所在的文件名

          %- 數(shù)字:表示該項的最小長度,如果不夠,則用空格填充

          例如,轉(zhuǎn)換模式為 %r [%t]%-5p %c - %m%n PatternLayout 將生成類似于以下內(nèi)容的輸出:

          176 [main] INFO? org.foo.Bar - Located nearest gas station.?
          ?(未完待續(xù))

          posted on 2006-03-28 22:17 Wei.Lee 閱讀(1466) 評論(0)  編輯  收藏 所屬分類: Dot Net 技術(shù)

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 泽普县| 宜宾县| 桂阳县| 南阳市| 水富县| 揭西县| 韩城市| 松江区| 华容县| 石渠县| 永寿县| 铁力市| 深州市| 武清区| 深圳市| 麻城市| 瑞安市| 清水县| 万源市| 虞城县| 天等县| 丰台区| 自治县| 南通市| 洛扎县| 宿松县| 澄江县| 鸡东县| 济阳县| 绵竹市| 太保市| 全椒县| 沂水县| 嘉峪关市| 沁阳市| 宜州市| 绿春县| 浪卡子县| 临泽县| 丘北县| 峨眉山市|