程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> IsLine FrameWork系列之七--AppLogProvider日志框架(上)

IsLine FrameWork系列之七--AppLogProvider日志框架(上)

編輯:關於.NET

日志與異常

部署系統以後,管理員需要有一套強大的日志系統來診斷和修復配置上的問題,這就需要一套通過配置就可以變更日志記錄的方式。經驗表明,日志模塊往往是軟件開發周期中的重要組成部分,Aicken曾用過一段時間的Log4Net,Log4Net是個很不錯的日志框架,但是有時候仍然覺得有些不順手,例如,需要用不同類型的日志記錄不同的類、方法的行為和不同的業務行為,有時需要在系統運行期,改變某個業務日志的記錄介質或是否記錄等等,遇到這些因素 Log4Net可能需要修改代碼重新編譯,而IsLine FrameWork的AppLogProvider模塊可以只修改配置文件就可滿足需求,它具有以下幾個優點:

它可以提供應用程序運行時的精確環境,可供開發人員盡快找到應用程序中的Bug;

一旦在程序中加入了Log 輸出代碼,程序運行過程中就能生成並輸出日志信息而無需人工干預。

不同的日志信息可以輸出到不同的地方(控制台、文件、數據庫等)以備以後研究之用。

這兩個Provider就是根據這些需求開發的,它們分別負責記錄系統中的運行日志與運行時異常,但是IsLine框架的AppLogProvider比Log4Net更加靈活、易用,使用這個模塊的優點如下:

由Render組件來定義輸出介質。正如名字所示,這些組件把它們附加到日志組件上並將輸出傳遞到輸出流中,可以把一個Appender組件附加到多個日志對象上。

靈活控制日志等級,在部署系統後,通過等級控制,快捷切換是否記錄某個業務塊的信息。

通過日志緩存的設定,使系統集中資源的收集日志和異常信息,當達到一定的閥值後,高效的寫入存儲介質。

通過配置文件,可以快捷改變日志記錄介質(文件、數據庫),記錄所用到的技術,不需更改程序文件,只需改變配置文件。

使用者可以很精確地控制日志信息的輸出,減少了多余信息,提高了日志記錄性能。同時,通過外部配置文件,用戶可以不用重新編譯程序就能改變應用的日志行為,使得用戶可以根據情況靈活地選擇要記錄的信息。

在這兩個Provider中,有一個很重要的概念,就是“Render ”,Render是日志異常模塊的配置節點,它決定了系統日志記錄的目標、記錄方式、路徑等信息,這些信息可以通過配置得出,它可以是數據庫、文本文件、 XML文件,甚至是電視機,不過除了數據庫、文件這些內置Render外,其他記錄介質需要繼承相關接口,然後擴展實現。

該Provider目前內置支持SQL SERVER、ORACLE、文本文件的記錄方式,並可使用sql語句或存儲過程為記錄手段。

Render介紹:

這是一個Render實例

<OracleUsingSPRender>
<AppenderStyle>Oracle</AppenderStyle>
<AppenderType>StoredProcedure</AppenderType>
<AppenderInf>IsLine.Data.Configuration.OracleConnectString</AppenderInf>
<AppenderContent>SP_ADD_ILFWLOG.ADD_ILFWLOG</AppenderContent>
<LayoutInf></LayoutInf>
<Level>Debug</Level>
</OracleUsingSPRender>

<OracleUsingSPRender></OracleUsingSPRender>為一個Render節點,括號中的為Render的名字,默認的Render有:

OracleUsingSPRender 使用Oracle數據庫的存儲過程記錄日志 OracleUsingTextRender 使用Oracle數據庫的sql語句記錄日志 SQLServerUsingSPRender 使用SQL SERVER數據庫的存儲過程記錄日志 SQLServerUsingTextRender 使用SQL SERVER數據庫的sql語句記錄日志 FileRender 將日志記錄至文本文件 MailRender 將日志發送給收件人

Render包括四部分:附加方式(AppenderStyle), 附加類型(AppenderType), 附加信息(AppenderInf)、 附加內容(AppenderContent)、等級(Level).

其中“AppenderStyle”指明了日志記錄方式,可以是數據庫、文件等,這是一個枚舉類型;

“AppenderType”指明依附形式,可以是文件、存儲過程名字等。

“AppenderContent”指明記錄內容。當AppenderStyle指明使用數據庫為日志記錄介質、“AppenderType”指明存儲過程時,“<AppenderContent>”為存儲過程名字;“AppenderType”指明sql語句時,“<AppenderContent>”為具體sql語句。

“Level”表示記錄的等級,該等級小於全局日志記錄等級時,該日志實例將不工作;全局日志記錄等級在web.config中配置,下面會有介紹。

“AppenderInf”表示記錄路徑或使用的擴展程序;

在ILFW框架裡,通過設置配置文件,每個日志對象都被分配了一個日志優先級別,即Level節點中的值,同時配置文件中還有一個表示全局級別的鍵值串,當Level節點中的枚舉值小於全局級別時,該日志對象將不會記錄。

Level級別信息如下:

Level名稱 解釋 優先級 All 將記錄所有實例的信息 最低 Info     Warn     Debug     Error     Fatal     Off 不會記錄任何實例的信息 最高

Web.config中全局級別配置如下:

<add key="IsLine.AppLog.Configuration.Level" value="Debug"/>

大於等於此級別的Render將被記錄,Off > Fatal > Error > Debug > Warn > Info > All

圖1 Render模型

IsLine.AppLog.AppLogProvider命名空間:

該命名空間共有9個類庫,包括配置、功能和枚舉三部分,以下是它的基本類關系:

圖2 AppLogProvider基本類關系

圖3 AppLogProvider基本類關系

圖4 ExceptionProcessProvider基本類關系

該命名空間提供了上冊邏輯將系統行為記錄到介質的能力,上層業務通過對WriteLog()方法的調用,即可完成對當前斷點行為的記錄。

在調用該方法前,需要預先獲得日志實體,並且將該實體做為參數傳遞給上述方法,日志實體中規范了記錄內容,日志模型如下:

圖5日志模型

該模型定義了6個日志字段,分別與數據庫或其他Appender對應,當AppLogProvider獲得日志實體後,便會加載Render模塊,對基本日志信息進行渲染。

Render通過對記錄介質、依附方式、依附格式、報告等級等配置信息的加載,從而完成日志的寫入工作。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved