IsLine Framework 將系統日誌與異常處理分離為獨立模組,異常模組建立在日誌模組之上,視異常為特殊類型的日誌事件。本文解析異常記錄的兩種模式、渲染器整合架構、自訂異常模型的設計原則與實作規範。
AppLogProvider(參考系列八、七)using IsLine.ExceptionProcess.ExceptionProcessProvider;<add key="IsLine.ExceptionProcess.Configuration.RenderName" value="OracleUsingSPRender" />
渲染器初始化流程:Render 初始化模組 → 載入 AppLog 渲染器 → 載入 Exception 物件。
<sectionGroup name="IsLine.AppLog.Configuration">
<section name="FileRender" type="IsLine.Data.Configuration.SuitConfig" />
<section name="OracleUsingSPRender" type="IsLine.Data.Configuration.SuitConfig" />
</sectionGroup>
<IsLine.AppLog.Configuration>
<FileRender>
<AppenderStyle>File</AppenderStyle>
<AppenderType>Text</AppenderType>
<AppenderInf>IsLineLog/Log4Net1.txt</AppenderInf>
<AppenderContent>->Event Date:@eventDate;->Level:@level;...</AppenderContent>
<Level>Debug</Level>
</FileRender>
<OracleUsingSPRender>
<AppenderStyle>Oracle</AppenderStyle>
<AppenderType>StoredProcedure</AppenderType>
<AppenderInf>IsLine.Data.Configuration.OracleConnectString</AppenderInf>
<AppenderContent>SP_ADD_ILFWLOG.ADD_ILFWLOG</AppenderContent>
<Level>Debug</Level>
</OracleUsingSPRender>
</IsLine.AppLog.Configuration>
切換日誌目標只需修改 RenderName 值(如改為 FileRender),程式碼零修改。
try {
string i = "i";
Response.Write(Convert.ToInt32(i)); // 故意轉型失敗
} catch (Exception ex) {
var ile = new ILException();
ile.WriteLog(ex); // 記錄異常
}
設計原則:系統設計階段預先定義所有可能錯誤,建立實體異常模型。
ExceptionEntity 基類IExceptionProcess 介面ILException.WriteLog(ex) 實作記錄邏輯使用方式:
try {
// 業務邏輯
} catch (MyBusinessException ex) { // 捕獲具體自訂異常
ex.WriteLog(ex); // 直接記錄,無需遍歷 Exception 樹
}
優勢:效能更高(避免反射遍歷)、安全性更強(量化異常型別)、符合封裝與抽象原則。

IsLine 異常框架以「配置驅動渲染器、自訂異常模型量化錯誤、兩種記錄模式兼顧簡易與專業」為核心設計。下一篇將深入異常展示機制、10 種模式切換與超級日誌容災設計。