5.4 異常鏈
應用程序通常會通過拋出另一個異常來響應異常。實際上,第一個異常引起第二個異常,以此類推,這就是“異常鏈(Chained Exceptions)”。異常鏈有助于用戶知道什么時候一個異常會導致另一個異常。以下是Throwable中支持異常鏈的方法和構(gòu)造函數(shù):
· Throwable getCause()
· Throwable initCause(Throwable)
· Throwable(String, Throwable)
· Throwable(Throwable)
initCause和Throwable構(gòu)造函數(shù)的Throwable參數(shù)是導致當前異常的異常。getCause返回導致當前異常的異常,initCause設置當前異常的原因。
以下示例顯示如何使用異常鏈:

在此示例中,當捕獲到IOException時將創(chuàng)建一個新的SampleException異常,附加原始的異常原因,并將異常鏈拋出到下一個更高級別的異常處理程序。
5.4.1 訪問堆棧跟蹤信息
現(xiàn)在讓我們假設更高級別的異常處理程序想要以自己的格式轉(zhuǎn)儲堆棧跟蹤。
注意
堆棧跟蹤(stack trace)提供有關當前線程的執(zhí)行歷史信息,并列出在異常發(fā)生時調(diào)用的類和方法的名稱。堆棧跟蹤是一個有用的調(diào)試工具,通常在拋出異常時會使用。
在異常對象上調(diào)用getStackTrace方法可獲取堆棧跟蹤信息,代碼如下:

5.4.2 記錄異常日志
如果要記錄catch塊中所發(fā)生的異常,最好不要手動解析堆棧跟蹤并將輸出發(fā)送到System.err(),而是使用Java日志框架(比如java.util.logging)將日志的內(nèi)容輸出發(fā)送到文件。
以下是使用日志框架的示例:

java.util.logging是Java自身提供的日志框架。除此之外,業(yè)界還提供了諸如Log4j、Logback和SLF4J等第三方開源的日志框架。這些框架往往擁有比較好的性能。
· Log4j是Apache旗下的Java日志記錄工具,它是由Ceki Gülcü首創(chuàng)的。
· Log4j 2是Log4j的升級產(chǎn)品。
· Commons Logging是Apache基金會所屬的項目,是一套Java日志接口,之前叫Jakarta Commons Logging,后更名為Commons Logging。
· SLF4J(Simple Logging Facade for Java)類似于Commons Logging,是一套簡易Java日志門面,本身并無日志的實現(xiàn)。同樣也是Ceki Gülcü首創(chuàng)的。
· Logback是SLF4J的實現(xiàn),與SLF4J是同一個作者。
這些框架都能很好地支持UDP以及TCP協(xié)議。應用程序?qū)⑷罩緱l目發(fā)送到控制臺或文件系統(tǒng)。通常使用文件回收技術(shù)來避免日志填滿所有磁盤空間。
日志處理的最佳實踐之一是關閉生產(chǎn)中的大部分日志條目,因為磁盤I/O的成本很高。磁盤I/O不但會減慢應用程序的運行速度,還會嚴重影響可伸縮性。將日志寫入磁盤也需要較高的磁盤容量,當磁盤用完之后,就有可能會降低應用程序的性能。日志框架提供了在運行時控制日志記錄的選項,以限制必須打印的內(nèi)容以及不打印的內(nèi)容。這些框架中的大部分都對日志記錄控件提供了細粒度的控制,還提供了在運行時更改這些配置的選項。
另外,日志可能包含重要的信息,如果分析得當,那么可能具有很高的價值。因此,限制日志條目本質(zhì)上限制了我們理解應用程序行為的能力。所以,日志是一把雙刃劍。
- Java Web基礎與實例教程(第2版·微課版)
- 數(shù)據(jù)結(jié)構(gòu)(Java語言描述)
- Learning ASP.NET Core 2.0
- Learning Bayesian Models with R
- Internet of Things with the Arduino Yún
- Monitoring Elasticsearch
- Oracle BAM 11gR1 Handbook
- Mastering Apache Maven 3
- C語言程序設計教程
- 零基礎入門學習Python(第2版)
- Solutions Architect's Handbook
- Clojure for Java Developers
- Laravel Application Development Blueprints
- 零基礎學Scratch 3.0編程
- Struts 2.x權(quán)威指南