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

IsLine FrameWork系列之十--ExceptionProcessProvider異常框架(下)

編輯:關於.NET

異常展示

系統異常模塊除了記錄功能,還有一個很重要的功能:異常展示,即系統發生異常後,展示給用戶怎樣的頁面。展示給用戶友好頁面具有以下必要性:

展示給用戶友好頁面,可以降低用戶焦慮感,提高用戶體驗。

將系統異常隱藏,避免代碼、路徑等技術信息外洩,提高系統安全性。

將系統運行時異常統一管理,有助於提高軟件整體質量,便於整體把控。

友好頁面的展示類型也是根據配置節點信息完成的,管理員只需更改配置節點中的枚舉值,即可改變用戶體驗頁面,用戶體驗頁面共有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>-&gt;Message:@Message</Message>
       <Level>-&gt;Level:@Level</Level>
       <HelpLink>-&gt;Helper:@HelpLink</HelpLink>
       <Source>-&gt;Source:@Source</Source>
       <StackTrace>-&gt;Stack Trace:@StackTrace</StackTrace>
       <TargetSite>-&gt;Trigger:@TargetSite</TargetSite>
       <HResult>-&gt;Result Code:@HResult</HResult>
       <EventDate>-&gt;Event Date:@EventDate</EventDate>
       <OtherPlus>-&gt;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" />

注意,超級日志只能寫入文本文件,並且使用超級日志需要確保相關賬戶對日志文件具有完全控制權限。

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