記錄例外資訊

前面章節我們介紹的都是記錄使用者自訂內容,其實 Log4net 也能夠紀錄例外資訊,連完整的例外堆疊都可以寫進日誌,方便程式開發人員除錯排查問題。

try
{
    int b = 0;
    int a = 100 / b;
}
catch (Exception ex)
{
    log.Error(ex.Message, ex);
}Code language: PHP (php)
  1. 觸發例外100 / b,變數b=0,會拋出 DivideByZeroException 除零例外。
  2. 攔截例外catch (Exception ex) 會捕捉所有繼承自Exception的例外。
  3. 日誌重點寫法log.Error(ex.Message, ex);
    • 第一個參數:自訂日誌訊息(這裡傳入例外簡短描述ex.Message
    • 第二個參數一定要傳入例外物件ex
    • log4net 偵測到第二個參數是Exception實例時,自動輸出完整堆疊資訊(StackTrace),包含錯誤程式位置與呼叫鏈。
錯誤寫法(無法輸出堆疊)
//  只傳入字串,會遺失堆疊資訊!
log.Error(ex.ToString());
log.Error(ex.Message);Code language: JavaScript (javascript)

這種寫法只會印出例外文字,部分日誌輸出格式不會自動展開呼叫堆疊,會增加除錯難度。

建議標準寫法
//  建議:補上業務描述,再傳入例外物件
log.Error("執行除法運算時發生錯誤", ex);Code language: JavaScript (javascript)

記錄例外資訊

Previous:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *