ASP.NET企業開發架構IsLine FrameWork系列之十–ExceptionProcessProvider異常架構(下)

來源:互聯網
上載者:User

接上文

  

    異常展示

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

    ●展示給方便使用頁面,可以降低使用者焦慮感,提高使用者體驗。

    ●將系統異常隱藏,避免代碼、路徑等技術資訊外泄,提高系統安全性。

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

    友好頁面的展示類型也是根據配置節點資訊完成的,管理員只需更改配置節點中的枚舉值,即可改變使用者體驗頁面,使用者體驗頁面共有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可以為以下枚舉值:

  1. 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" />

    注意,超級日誌只能寫入文字檔,並且使用超級日誌需要確保相關賬戶對記錄檔具有完全控制許可權。

  

    我是李鳴 歡迎您關注我的下一篇文章。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.