45
A
回答
88
31
如果您在例外情況下調用printStackTrace()
,則將跟蹤寫入System.err
,並且很難將其路由到其他位置(或對其進行過濾)。不要這樣做,建議您使用日誌框架(或多個日誌框架的包裝,如Apache Commons Logging),並使用該框架記錄異常(例如logger.error("some exception message", e)
)。
這樣做,可以讓你:
- 寫日誌的語句來一次不同的位置,例如控制檯和文件
- 根據嚴重性(錯誤,警告,信息,調試等)和來源(通常是基於包或類的)過濾日誌語句
- 對日誌格式有一些影響,而不必更改代碼
- 等
14
生產質量程序應使用的許多記錄的替代品之一(例如log4j的,的logback,java.util.logging中)報告錯誤和其他診斷。這具有許多優點:
- 日誌消息轉到可配置位置。
- 除非您配置日誌記錄,否則最終用戶不會看到這些消息。
- 您可以使用不同的記錄器和記錄級別等來控制記錄多少或多少記錄。
- 您可以使用不同的appender格式來控制日誌記錄的外觀。
- 您可以輕鬆地將日誌記錄輸出插入到更大的監視/日誌記錄框架中。
- 以上所有都可以在不更改代碼的情況下完成;即通過編輯已部署的應用程序的日誌配置文件。
相反,如果你只是使用的printStackTrace,部署/最終用戶,如果任何一點控制和日誌信息容易要麼被丟失或顯示在不適當的情況下,最終用戶。(沒有什麼比一個隨機堆棧跟蹤更害怕一個膽小的用戶。)
1
幾乎每個日誌記錄框架都提供了一個方法,我們可以在該方法中將可丟棄對象與消息一起傳遞。如:
public trace(Marker marker, String msg, Throwable t);
它們打印可拋出對象的堆棧跟蹤。
3
簡單地說,e.printStackTrace()不是很好的做法,因爲它只是將堆棧跟蹤打印到標準錯誤。正因爲如此,你無法真正控制這個輸出的位置。
相關問題
- 1. 如何避免重複記錄而不是否存在
- 2. 避免使用Dropbox選擇器登錄?
- 3. 如何避免一對多關聯中的重複記錄而不使用不同的記錄?
- 4. 使用SQLDataReader而不是記錄集
- 5. 避免重複記錄 - HashSet
- 6. 如何避免記錄調用棧時,在Xcode
- 7. 避免調用DAO.getAll()
- 8. 避免JDBC調用
- 9. android-我應該使用GLSurfaceView而不是Canvas來避免bitmapfactory?
- 10. 如何使用$ _GET ['ID']避免?id = 1與/ myid而不是
- 11. 如何避免使用EEPROM而不是閃存?
- 12. 使用空間而不是控制來避免emacs小指?
- 13. 使用記錄集而不是記錄的SSIS DataFlowTask
- 14. Python - 避免在函數之間傳遞記錄器引用?
- 15. 如何避免科學記數法而不是顯示整數?
- 16. 避免循環,而使用excel記事本
- 17. 使用A記錄而不是名稱服務器
- 18. 避免R中的瀏覽器調用
- 19. 是否連續調用errno來避免?
- 20. 如何捕獲我使用tableadapter插入的記錄以避免重複記錄?
- 21. 如何避免使用MVC標記湯?
- 22. 使用Swift更新實體記錄而不是使用CoreData創建新記錄
- 23. 如何使用日誌記錄模塊避免重複輸出
- 24. 如何避免使用logback進行雙重記錄?
- 25. 避免使用VBA中的ADO記錄集檢索'echo'打印
- 26. 應避免使用邏輯運算符(使用||而不是'或')sensiolabs洞察
- 27. 避免使用通用前綴而不改變lookahead
- 28. 避免嵌套調用
- 29. 避免遞歸調用.ajax();
- 30. lambdify,避免顯式調用
只是在這裏感謝這裏寶貴的反饋;-) – GhostCat