前面章節我們介紹的都是記錄使用者自訂內容,其實 Log4net 也能夠紀錄例外資訊,連完整的例外堆疊都可以寫進日誌,方便程式開發人員除錯排查問題。
try
{
int b = 0;
int a = 100 / b;
}
catch (Exception ex)
{
log.Error(ex.Message, ex);
}Code language: PHP (php)
- 觸發例外:
100 / b,變數b=0,會拋出DivideByZeroException除零例外。 - 攔截例外:
catch (Exception ex)會捕捉所有繼承自Exception的例外。 - 日誌重點寫法:
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: 獨立組態檔