接上文
異常展示
系統異常模組除了記錄功能,還有一個很重要的功能:異常展示,即系統發生異常後,展示給使用者怎樣的頁面。展示給方便使用頁面具有以下必要性:
●展示給方便使用頁面,可以降低使用者焦慮感,提高使用者體驗。
●將系統異常隱藏,避免代碼、路徑等技術資訊外泄,提高系統安全性。
●將系統運行時異常統一管理,有助於提高軟體整體品質,便於整體把控。
友好頁面的展示類型也是根據配置節點資訊完成的,管理員只需更改配置節點中的枚舉值,即可改變使用者體驗頁面,使用者體驗頁面共有10中方式,分別是拋出原始異常資訊、拋出定製異常資訊、拋出簡單資訊(不包含異常)以及隱藏異常資訊等方式。
在系統開發階段,可以使用拋出原始異常資訊的展現方式,系統部署後,可以使用拋出簡單資訊(不包含異常)或隱藏異常資訊的方式,選擇這些展示方式的同時,還可以選擇是否記錄到日誌介質。
各種異常展示的配置資訊大全,假如有一個頁面代碼如下:
代碼
try
{
string i = "i";
Response.Write(i);
}
catch (Exception ex)
{
ILException ile = new ILException();
ile.WriteLog(ex);
}
正常訪問頁面顯示字串“i”,假如代碼修改如下,便會發生錯誤:
代碼
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可以為以下枚舉值:
- ThrowOriginalWithLog
這種方式的含義是拋出原始錯誤,終止應用程式,並將這種錯誤記錄到異常日誌中。
圖1 原始錯誤
2.ThrowOriginalWithoutLog
這種方式的含義只是拋出原始錯誤,終止應用程式,並不記錄這種錯誤,圖示同上。
3.ThrowFriendlyWithLog
這種方式的含義是拋出友好的錯誤資訊,終止應用程式,並記錄異常。友好異常資訊由自己定義。
圖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>
<Level>->Level:@Level</Level>
<HelpLink>->Helper:@HelpLink</HelpLink>
<Source>->Source:@Source</Source>
<StackTrace>->Stack Trace:@StackTrace</StackTrace>
<TargetSite>->Trigger:@TargetSite</TargetSite>
<HResult>->Result Code:@HResult</HResult>
<EventDate>->Event Date:@EventDate</EventDate>
<OtherPlus>->Contact Method:</OtherPlus>
</ILExceptionModel>
</IsLine.ExceptionProcess.Configuration>
5.ThrowSimpleWithLog
這種方式的含義是拋出簡單的預定義的錯誤資訊,終止應用程式,並記錄異常。
圖3 拋出簡單預定義資訊
這些預定義資訊由以下節點定義,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模型描述了異常記錄位置、格式等資訊,詳細請見
IsLine FrameWork系列之八--ExceptionProcessProvider異常架構(上) 中的第三點。
超級異常日誌
如果在異常記錄的過程中,發生錯誤,這時異常資訊不會記錄成功,異常資訊自動被忽略,如果管理員希望在日誌模組出現錯誤時,ILFW仍然記錄這些資訊,管理員可以開啟設定檔中“超級日誌”的開關。
當此開關開啟後,如果日誌模組出現錯誤(例如資料庫連接中斷),ILFW會自動將當前資訊記錄至一個文字檔中,直到導致日誌模組錯誤的因素消失。
在web.config中添加以下節點開啟超級日誌功能:
<add key="IsLine.ExceptionProcess.ExceptionProcessProvider.IsOpenDebugInfo" value="True" />
以下節點表示超級日誌記錄位置:
<add key="IsLine.ExceptionProcess.ExceptionProcessProvider.DebugInfo" value="C:\IsLineLog\FinallyLog.txt" />
注意,超級日誌只能寫入文字檔,並且使用超級日誌需要確保相關賬戶對記錄檔具有完全控制許可權。
我是李鳴 歡迎您關注我的下一篇文章。