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

IsLine FrameWork系列之九--ExceptionProcessProvider異常框架(上)

編輯:關於.NET

接上文

IsLine.ExceptionProcess.ExceptionProcessProvider命名空間:

系統日志和系統異常是分開記錄的,ILFW將系統日志與異常分開處理,以提高系統靈活性和安全性。ExceptionProcessProvider是應用程序需要交互的主要組件,它用來產生異常消息,產生的異常消息並不直接顯示,還要預先經過Layout的格式化處理後才會輸出。

概述: 

異常模塊依附於IsLine.AppLog.AppLogProvider部分,同時異常模塊設計時是作為一種特殊的系統日志來對待的,所以使用Exception模塊首先要配置AppLog模塊,具體方法參見Aicken的相關文章。

配置好日志模塊後,需要引入命名空間:

using IsLine.ExceptionProcess.ExceptionProcessProvider;

並在web.config中使用“add”標簽添加一個Exception的指針:

<add key="IsLine.ExceptionProcess.Configuration.RenderName" value="OracleUsingSPRender"/>

這個指針的作用是告訴Exception模塊使用的渲染器,渲染器的名字就是value,模塊加載時,會自動加載IsLine.AppLog命名空間下的“渲染器初始化”模塊,經過對渲染器的初始化後,才會加載具體的Exception對象。

這個配置過程描述如下,假使我們需要把異常信息記入Oracle數據庫,後來發現異常沒那麼重要,只需記入文本文件就可以了,那麼我們需要這樣修改web.config文件。

1.在<configSections></configSections>之間加入如下節點

代碼

<sectionGroup name="IsLine.AppLog.Configuration">
       <section name="FileRender" type="IsLine.Data.Configuration.SuitConfig"/>
       <section name="OracleUsingSPRender" type="IsLine.Data.Configuration.SuitConfig"/>
</sectionGroup>

2.在</configSections><appSettings>之間加入如下節點

代碼

<IsLine.AppLog.Configuration>
     <FileRender>
       <AppenderStyle>File</AppenderStyle>
       <AppenderType>Text</AppenderType>
       <AppenderInf>IsLineLog/Log4Net1.txt</AppenderInf>
       <AppenderContent>-&gt;Event Date:@eventDate;-&gt;Level:@level;-&gt;Message:@exception;-&gt;Source:@source;-&gt;Stack Trace:@StackTrace-&gt;Trigger:@trigger;-&gt;Memo:@message</AppenderContent>
       <LayoutInf></LayoutInf>
       <Level>Debug</Level>
     </FileRender>
     <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>
</IsLine.AppLog.Configuration>

3.在web.config中使用<add key="IsLine.ExceptionProcess.Configuration.RenderName" value="OracleUsingSPRender"/>指明異常使用的日志模型。“OracleUsingSPRender”是我們在第2步指明的兩個日志模型其中一個的名字,現在系統中所有異常信息都會按照“OracleUsingSPRender”模型所描述的介質寫入了。

這時老板突然出現說,異常不用記Oralce了,記錄文本文件就可以了,好吧,我們只需改一下異常渲染器的名字就可以,將 “OracleUsingSPRender”改為“FileRender”,這樣系統中的異常就會自動轉向文本文件了。文本文件的路徑在 “AppenderInf”標簽中描述,記錄內容在“AppenderContent”標簽中描述。

系統異常記錄

該命名空間負責記錄系統中的異常信息,程序人員可以直接將.Net中的“Exception”對象直接拋送給 ExceptionProcessProvider,該Provider自動將Exception類型轉換為剛才提到的“LogEntity”,並寫入相應的介質,對應介質以及其他信息與日志節點可以相同,亦可以使用單獨節點,互不影響。

另一種標准的ExceptionProcessProvider使用方式是值得推薦的,在上文中提到,系統設計時,一般本人會預先建立業務實體模型、業務事件模型、業務消息模型,在業務實體模型中,包括業務模型和異常模型。其中異常模型的設計是在系統設計階段完成的,它預先定義了系統運行時可能會發生的錯誤,並為這些錯誤建立模型。

每一種自定義的異常模型須繼承ExceptionEntity基類,並實現IexceptionProcess接口,這樣做不但量化了系統異常,有效管理了系統中的異常,而且增強了系統安全性。在上層調用異常模塊時,也無須顯示使用WriteLog()方法,當Catch捕獲到系統異常後,ExceptionProcessProvider會自動攔截,並將進入ILFW異常模塊的處理流程。

IsLine FrameWork 目前支持兩種異常記錄模式:

使用ILException類記錄異常

這種方式是最簡單的方式,在對web.config進行簡單的信息配置後,可以在程序中直接截獲並記錄異常,但缺點是需要對各種異常進行遍歷。這種方式代碼如下:

代碼

try
       {
         string i = "i";
         Response.Write(i);
       }
       catch (Exception ex)
       {
         ILException ile = new ILException();
         ile.WriteLog(ex);
       }

2.使用自定義異常記錄異常信息

自定義異常記錄的方式是比較標准的OOP原則方式,你需要在系統設計階段量化每一種異常,並且為這些異常建模,所有模型類必須繼承ILException類,並且實現WriteLog()方法

關於WriteLog()方法的實現,可以在異常類內部直接調用ILException的WriteLog(ex)實現,這是很簡單的事情。

然後你就可以通過以下代碼使用這個異常管理模塊了:

代碼

try
       {
         string i = "i";
         Response.Write(i);
       }
       catch (ILException ex)
       {
         ex.WriteLog(ex);
       }

由於事先對異常進行了定義,系統不必再遍歷Exception樹,所以這種方法擁有較高的性能,並且體現了抽象與封裝的原則。

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