在日誌框架log4j & log4net中,您可以記錄各種級別的信息。大多數級別都有明顯的意圖(比如「調試」日誌與「錯誤」)。然而,我一直膽怯的一件事是將我的日誌分類爲「致命」。何時記錄錯誤致命?
什麼類型的錯誤非常嚴重,以至於它們應該被歸類爲致命?雖然這是輕微的情況驅動,但在決定將異常記錄爲致命錯誤還是僅僅是錯誤時,您使用的一些經驗法則是什麼?如果缺少的東西或情況發生了該應用程序根本無法繼續
在日誌框架log4j & log4net中,您可以記錄各種級別的信息。大多數級別都有明顯的意圖(比如「調試」日誌與「錯誤」)。然而,我一直膽怯的一件事是將我的日誌分類爲「致命」。何時記錄錯誤致命?
什麼類型的錯誤非常嚴重,以至於它們應該被歸類爲致命?雖然這是輕微的情況驅動,但在決定將異常記錄爲致命錯誤還是僅僅是錯誤時,您使用的一些經驗法則是什麼?如果缺少的東西或情況發生了該應用程序根本無法繼續
我認爲致命錯誤是,當你的應用程序不能做任何更多有用的工作。非致命錯誤是指出現問題時,即使功能或性能水平降低,您的應用程序仍可以繼續運行。致命錯誤的
例子包括:
非致命錯誤將包括:
錯誤是致命的。可能的例子是缺少必需config.file或異常時「冒泡」,由未處理的異常處理程序捕獲
如果我的下一步是要終止應用程序,或者僅僅不做任何後續工作,那麼我會使用致命的。如果應用程序是批處理的一部分,或者有多個進程正在運行,這對追蹤發生的事情可能很有用。
如果有痊癒的機會(例如,有重試了一段時間網絡連接丟失),我不會用一個致命的。
如果我有一個主線程啓動多個服務線程,因爲一些錯誤的輸入,但應用程序仍然可以成爲新的請求,我不認爲這是致命的其中之一失敗。
爲了使這個答案短暫的甜蜜,如果你的應用程序崩潰,我認爲是致命的。如果您無法連接到重要資源(如數據庫或所需服務),那將是致命的。總的來說,我會說,如果它使您的應用程序無法正常運行並影響用戶,我會將其歸類爲致命錯誤。
但是分類錯誤,最重要的辦法是堅持遵循拇指如第69條中C++ Coding Standards規則:
「在設計早期制定切實可行的,一致的,合理的錯誤處理策略,並然後堅持下去。「
網絡連接丟失可能不是致命的。這可能是暫時的。 – 2008-11-24 03:46:15
我的意思是「不可恢復」或「花費很長時間才能恢復」的全部損失,這就是爲什麼非致命錯誤包含間歇性版本的原因。 – paxdiablo 2008-11-24 03:56:08