2008-11-24 47 views
24

在日誌框架log4j & log4net中,您可以記錄各種級別的信息。大多數級別都有明顯的意圖(比如「調試」日誌與「錯誤」)。然而,我一直膽怯的一件事是將我的日誌分類爲「致命」。何時記錄錯誤致命?

什麼類型的錯誤非常嚴重,以至於它們應該被歸類爲致命?雖然這是輕微的情況驅動,但在決定將異常記錄爲致命錯誤還是僅僅是錯誤時,您使用的一些經驗法則是什麼?如果缺少的東西或情況發生了該應用程序根本無法繼續

回答

30

我認爲致命錯誤是,當你的應用程序不能做任何更多有用的工作。非致命錯誤是指出現問題時,即使功能或性能水平降低,您的應用程序仍可以繼續運行。致命錯誤的

例子包括:

  • 暗戰的記錄設備上的磁盤空間,你就必須保持記錄。
  • 客戶端應用程序中網絡連接的完全丟失。
  • 如果不能使用默認值,缺少配置信息。

非致命錯誤將包括:

  • 其中由於某種原因,單個會話失敗的服務器,但你仍然可以服務於其他客戶端。
  • 如果可以建立新會話,則會發生間歇性錯誤,例如會話丟失。
  • 如果可以使用默認值,缺少配置信息。
+0

網絡連接丟失可能不是致命的。這可能是暫時的。 – 2008-11-24 03:46:15

+0

我的意思是「不可恢復」或「花費很長時間才能恢復」的全部損失,這就是爲什麼非致命錯誤包含間歇性版本的原因。 – paxdiablo 2008-11-24 03:56:08

6

錯誤是致命的。可能的例子是缺少必需config.file或異常時「冒泡」,由未處理的異常處理程序捕獲

1

如果我的下一步是要終止應用程序,或者僅僅不做任何後續工作,那麼我會使用致命的。如果應用程序是批處理的一部分,或者有多個進程正在運行,這對追蹤發生的事情可能很有用。

如果有痊癒的機會(例如,有重試了一段時間網絡連接丟失),我不會用一個致命的。

如果我有一個主線程啓動多個服務線程,因爲一些錯誤的輸入,但應用程序仍然可以成爲新的請求,我不認爲這是致命的其中之一失敗。

1

爲了使這個答案短暫的甜蜜,如果你的應用程序崩潰,我認爲是致命的。如果您無法連接到重要資源(如數據庫或所需服務),那將是致命的。總的來說,我會說,如果它使您的應用程序無法正常運行並影響用戶,我會將其歸類爲致命錯誤。

但是分類錯誤,最重要的辦法是堅持遵循拇指如第69條中C++ Coding Standards規則:

「在設計早期制定切實可行的,一致的,合理的錯誤處理策略,並然後堅持下去。「