使用IsLine FrameWork開發ASP.NET程式之四—使用AppLogProviderTlog架構

來源:互聯網
上載者:User

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

  1. 它可以提供應用程式運行時的精確環境,可供開發人員儘快找到應用程式中的Bug;
  2. 一旦在程式中加入了Log 輸出代碼,程式運行過程中就能產生並輸出日誌資訊而無需人工幹預。
  3. 不同的日誌資訊可以輸出到不同的地方(控制台、檔案、資料庫等)以備以後研究之用。

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

  1. 由Render組件來定義輸出介質。正如名字所示,這些組件把它們附加到日誌組件上並將輸出傳遞到輸出資料流中,可以把一個Appender組件附加到多個日誌對象上。
  2. 靈活控制日誌等級,在部署系統後,通過等級控制,快捷切換是否記錄某個業務塊的資訊。
  3. 通過日誌緩衝的設定,使系統集中資源的收集日誌和異常資訊,當達到一定的閥值後,高效的寫入儲存介質。
  4. 通過設定檔,可以快捷改變日誌記錄介質(檔案、資料庫),記錄所用到的技術,不需更改程式檔案,只需改變更配置置檔案。
  5. 使用者可以很精確地控制日誌資訊的輸出,減少了多餘資訊,提高了日誌記錄效能。同時,通過外部設定檔,使用者可以不用重新編譯器就能改變應用的日誌行為,使得使用者可以根據情況靈活地選擇要記錄的資訊。

    在這兩個Provider中,有一個很重要的概念,就是“Render ”,Render是日誌異常模組的配置節點,它決定了系統日誌記錄的目標、記錄方式、路徑等資訊,這些資訊可以通過配置得出,它可以是資料庫、文字檔、XML檔案,甚至是電視機,不過除了資料庫、檔案這些內建Render外,其他記錄介質需要繼承相關介面,然後擴充實現。

    該Provider目前內建支援SQL SERVER、ORACLE、文字檔的記錄方式,並可使用sql語句或預存程序為記錄手段。

    以下是一個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:將日誌發送給收件者

    以上日誌方式是IsLine FrameWork已經內建的支援日誌記錄方式,詳細的具體配置方法可以參考作者的部落格,這裡就不給大家闡述了。

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

    其中“AppenderStyle”指明了日誌記錄方式,可以是資料庫、檔案等,這是一個枚舉類型;

    “AppenderType”指明依附形式,可以是檔案、預存程序名字等。

    “AppenderContent”指明記錄內容。當AppenderStyle指明使用資料庫為日誌記錄介質、“AppenderType”指明預存程序時,“AppenderContent”為預存程序名字;“AppenderType”指明sql語句時,“AppenderContent”為具體sql語句。

    “Level”表示記錄的等級,該等級小於全域日誌記錄等級時,該日誌執行個體將不工作;全域日誌記錄等級在web.config中配置,下面會有介紹。

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

    在ILFW架構裡,通過設定設定檔,每個日誌對象都被分配了一個日誌優先順序別,即Level節點中的值,同時設定檔中還有一個表示全域層級的索引值串,當Level節點中的枚舉值小於全域層級時,該日誌對象將不會記錄。層級大小關係為Off > Fatal > Error > Debug > Warn > Info > All,這些關係可以通過Level關鍵字進行配置,層級資訊如下,在Web.config中進行全域層級配置:

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

這樣,大於等於Debug層級的Render將被記錄。當Level層級設定為All時,此時全域層級最低,AppLogProvider將記錄所有執行個體的資訊;當Level層級設定為Off時,此時全域層級最高,AppLogProvider不會記錄任何執行個體的資訊。

    ● IsLine.AppLog.AppLogProvider命名空間

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

    在調用該方法前,需要預先獲得日誌實體,並且將該實體做為參數傳遞給上述方法,日誌實體中規範了記錄內容,記錄欄位為標準的.Net 異常欄位,分別與資料庫或其他Appender對應,當AppLogProvider獲得日誌實體後,便會載入Render模組,對基本日誌資訊進行渲染。

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

程式調用AppLogProvider時,需要進行執行個體化,在執行個體化過程中指定使用哪個Render,不同的執行個體對應不同的配置資訊,就可以對應不同的等級、記錄介質,如下:

圖 4.1 建構函式配置效果

    如所示,使用前先執行個體化一個日誌執行個體,執行個體化時有6中內建方式可以選擇,我們剛配置了File節點資訊,所以在這裡選擇“File”:

    //定義日誌執行個體

    LogProvider lp = new LogProvider(Appenders.File)

    //定義日誌實體

    LogEntity le = new LogEntity();

    //給日誌內容欄位賦值

    le.Exception="IsLine Test";

    le.Message = "OK";

    //將日誌內容寫入介質

    lp.WriteLog(le);

這樣就完成了日誌寫入過程,效果如下:

圖 4.2 文檔型日誌格式

    如日後希望變更記錄檔寫入屬性,比如希望把該日誌輸出至Oracle,可以將“AppenderStyle”節點名稱值設定為“Oracle“,並在其他節點中填寫對應內容,這樣“FileRender”Render就指向了Oracle介質,IsLine的Render模組會自動在內部渲染出一個Oracle承載器供使用,而代碼不需做任何修改。甚至你還可以定義一個自訂日誌Render,在new LogProvider時傳入的參數為自訂節點的名稱"YourName"。具體方法參見作者部落格。

    日誌模組允許緩衝方式,即系統將日誌資訊累計到一個閥值時,在批量寫入儲存介質,這樣就增強了靈活性。AppLogProvider提供了多種方式來記錄一個日誌訊息,可以在應用程式裡建立多個AppLogProvider。

    全域緩衝,高於此緩衝時才會被寫入日誌,例如定義緩衝中日誌條數大於2條,再觸發寫日誌,可以在web.config中添加以下配置資訊:

   <add key="IsLine.AppLog.Configuration.BufferSize" value="2"/>

預設緩衝策略是關閉的,只有當添加上面的代碼後,緩衝策略才會開啟。

    IsLine AppLogProvider是一個很好用的日誌模組,靈活是它的特性。本講主要說的日誌操作,在下一講,我們將來說一下異常處理。

此文已在《軟體報》同步發布,任何個人媒體不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.