2016-11-23 181 views
1

在Java中,異常處理可以通過多種方式完成。讓我們使用Logging框架將異常處理區分爲log4jsl4j,其中除了處理異常外,這兩者都可以將日誌重定向到文件。printStackTrace與Java中的Logger框架

如果不是Logger框架,我們使用異常類方法printStackTrace()來處理異常,並通過將異常調用堆棧重定向到文件而不是標準錯誤輸出/控制檯來獲取異常調用堆棧,現在,下面是問題:

  1. 稍後的實現是否會處理異常,或者只是將異常打印到文件?
  2. 基於什麼理由在生產環境中實現Logger框架優於printStacktrace()

在此先感謝!

+0

我通常看到兩者都被實際使用。我已經看到使用了'log4j'和'sl4j',並且在發生異常時,'printStacktrace()'的輸出被髮送到記錄器。 –

+0

感謝蒂姆,但想知道在生產中選擇哪個選項,因爲我們可以使用配置來實現appender和旋轉,這是唯一使printstacktrace更有利的事情() –

+0

您對「稍後的實現「在第一個問題? –

回答

0

至2) 日誌框架並不是更好的文件處理程序,但是,例如,提取註銷代碼的配置。因此,當您更改配置時(例如開發和生產的日誌的其他詳細級別),您不必更改代碼 - 您只需爲每個測試階段使用其他日誌記錄框架配置。 如果要更改日誌文件名稱,日誌文件大小(旋轉)或不同包或類的特定日誌詳細信息,可以通過修改配置輕鬆完成此操作。

+0

謝謝尼克拉斯我猜記錄器可以與printStackTrace()在打印方面日誌消息,但不是在異常處理方面,因爲這些都不會執行異常處理,而只是簡單地將日誌記錄到不同的文件/流......我是正確的? –

+0

我不確定你的意思是「異常處理」。當我實現業務邏輯時,我個人會使用術語「異常處理」,當發生異常時,應該怎麼做 - 中止業務邏輯/事務並顯示特定錯誤,中止業務邏輯/事務並顯示標準錯誤並記錄詳細信息,完成業務邏輯/事務並在後臺記錄詳細信息,... - 所有這些決策都不能由日誌框架完成。所以用我的話說,我會說一個日誌框架不能做異常處理。 –

0

有很多的原因,你不應該使用printStackTrace()和,once it's not a recent thing here,讓我們不要reivent輪(特別注意的God's Perfect Exception link,一個確實很好)。

日誌框架允許我們很多東西(這麼多):

  • 在同一時間發送我們的日誌到不同的地方。他們中的大多數都帶有幾個appender,可以處理控制檯和文件輸出,並使用電子郵件或JMS發送日誌消息,例如:
  • 自定義具有嚴重級別,來源,過濾器密鑰環等的消息;
  • 基於xml/properties文件的簡單和自定義配置,無需更改Java代碼;
  • 良好的異步處理,主要用於分佈式系統;
  • 詳細配置,設置您的例外將被記錄的方式;

自定義添加器的功能,特別是偉大的,因爲我們可以將日誌發送到非文件的目標,像SplunkSumo LogicLogglylogstash等,正如許多企業已經這樣做了時下分析和監控他們的生產系統。

另外,考慮analysing the right logging framework爲您的需要。