上一期我們向大家介紹了如何配置與記錄異常,下面我將向大家介紹如何配置異常的展示。異常的展示是指系統一旦發生異常,將會以何種樣式返回給終端使用者,IsLine FrameWork為開發人員提供了10種不同的展現方式,本期文章會給大家詳細介紹。
對異常的展示管理分為基本異常管理與超級日常管理。基本異常是指編碼造成的異常,超級異常是指在記錄異常的過程中發生的異常,本文將對如何處理這兩種異常展開講解。
一.基本異常展示的方式
如果有以下錯誤碼:
try
{
string i = "i";
Response.Write(Convert.ToInt32(i));
}
catch (Exception ex)
{
ILException ile = new ILException();
ile.WriteLog(ex);
}
根據以下不同配置資訊,頁面有不同的顯示,這個顯示方式根據web.config給出的索引值決定:
<add key="IsLine.ExceptionProcess.Configuration.ProcessStyle" value="ThrowOriginalWithLog"/>
其中,value可以為以下枚舉值:
1.ThrowOriginalWithLog
這種方式的含義是拋出原始錯誤,終止應用程式,並將這種錯誤記錄到異常日誌中。
圖6.1 原始錯誤
2.ThrowOriginalWithoutLog
這種方式的含義只是拋出原始錯誤,終止應用程式,並不記錄這種錯誤,圖示同上。
3.ThrowFriendlyWithLog
這種方式的含義是拋出友好的錯誤資訊,終止應用程式,並記錄異常。友好異常資訊由自己定義。
圖6.2 拋出友好資訊
4.ThrowFriendlyWithoutLog
這種方式的含義是拋出友好的錯誤資訊,終止應用程式,並不記錄異常,圖示同上。
需要注意的是,使用3、4兩種配置,需要在web.config中添加額外的節點資訊,這些資訊決定了友好資訊的顯示欄位與排版:
在<configSections></configSections>中添加以下資訊
<sectionGroup name="IsLine.ExceptionProcess.Configuration">
<section name="ILExceptionModel" type="IsLine.Data.Configuration.SuitConfig" />
</sectionGroup>
在</configSections><appSettings>之間加入以下資訊
<IsLine.ExceptionProcess.Configuration>
<ILExceptionModel>
<Message>->Message:@Message</Message>
其他配置地段省略。。。
</ILExceptionModel>
</IsLine.ExceptionProcess.Configuration>
5.ThrowSimpleWithLog
這種方式的含義是拋出簡單的預定義的錯誤資訊,終止應用程式,並記錄異常。拋出的異常內容只有很簡單的資訊“The current page has an exception!”,這個預定義資訊由以下節點定義,value部分就是頁面顯示的資訊:
<add key="IsLine.ExceptionProcess.ExceptionProcessProvider.FriendlySimpleText" value="The current page has an exception!"/>
6.ThrowSimpleWithoutLog
這種方式的含義是拋出簡單的預定義的錯誤資訊,終止應用程式,並不記錄異常,圖示同上。
7.ShowSimpleWithLog
這種方式的含義是顯示簡單的預定義的錯誤資訊,不終止應用程式,並記錄異常。
這種方式顯示錯誤資訊與5、6相同,但是5、6配置形式,如果程式中遇到錯誤則會觸發“throw”,從而導致程式終止運行;而7、8怎會顯示錯誤,程式繼續運行。
8.ShowSimpleWithoutLog
這種方式的含義是顯示簡單的預定義的錯誤資訊,不終止應用程式,並不記錄異常。
9.HideWithLog
這種方式的含義是不顯示任何錯誤資訊,不終止應用程式,並將異常資訊記錄。
10. HideWithoutLog
這種方式的含義是不顯示任何錯誤資訊,不終止應用程式,並不記錄異常資訊。
注意,異常的記錄是日誌模組可以理解為繼承的關係,日誌模組的緩衝等特性配置,在異常中仍有效。
至於,異常資訊被寫到什麼地方,正如我們前面所說到的,它是由日誌的Render決定的:
<add key="IsLine.ExceptionProcess.Configuration.RenderName" value="OracleUsingSPRender"/>
“OracleUsingSPRender”便是日誌的Render名稱, Render模型描述了異常記錄位置、格式等資訊,詳細請見上一期文章中的內容。
從上文中大家可以看出,通過web.config中的配置資訊,使用者只需要修改一個枚舉值,即可改變異常的展現方式,同時決定系統在發生異常後是否繼續運行下去,這對於一個系統很重要,有些時候我們需要系統即使發生異常也要繼續運行,而有些時候我們必須在異常發生時復原並停止系統運行。使用異常支援模組,我們將很容易做到這一點。
二.關於超級異常日誌
如果在異常記錄的過程中,發生錯誤,這時異常資訊不會記錄成功,異常資訊自動被忽略,如果管理員希望在日誌模組出現錯誤時,ILFW仍然記錄這些資訊,管理員可以開啟設定檔中“超級日誌”的開關。
當此開關開啟後,如果日誌模組出現錯誤(例如資料庫連接中斷),ILFW會自動將當前資訊記錄至一個文字檔中,直到導致日誌模組錯誤的因素消失。
在web.config中添加以下節點開啟超級日誌功能:
<add key="IsLine.ExceptionProcess.ExceptionProcessProvider.IsOpenDebugInfo" value="True" />
以下節點表示超級日誌記錄位置:
<add key="IsLine.ExceptionProcess.ExceptionProcessProvider.DebugInfo" value="C:\IsLineLog\FinallyLog.txt" />
注意,超級日誌只能寫入文字檔,並且使用超級日誌需要確保相關賬戶對記錄檔具有完全控制許可權。
同時需要注意的時,如果您將日誌模組配置為緩衝開啟,那麼記錄異常時也將繼承這一特性,依據緩衝大小進行緩衝,超過緩衝閥值時,在寫入異常資訊。
在下一講,我們將會講針對web開發,講解一下緩衝、Session、Cookie的配置與使用。
此文已在《軟體報》同步發布,任何個人媒體不得轉載。