java自定義異常列印內容詳解
阿新 • • 發佈:2020-01-07
本文例項為大家分享了java自定義異常列印內容的具體程式碼,供大家參考,具體內容如下
背景:在開發中,我們可能會使用到自定義異常,但是,這個自定義異常在列印日誌時,往往列印的內容比較多。
1.自定義異常列印內容
可以看到,雖然我們使用的是自定義異常,但是當丟擲時,還是會打印出堆疊的全部資訊。
2.檢視原始碼
通過檢視原始碼,我們可以得知,當丟擲異常時,程式會呼叫此異常的fillInStackTrace方法,但是,大部分異常都沒有對該方法做處理。基本是呼叫super的方法。
可以看到,此方法的父類實現,是在Throwable類中。而且此方法加了synchronized鎖,檢視堆疊的資訊。那麼必然會影響效能。
底層實現是native,呼叫C語言的方法。
3.解決方法
①.編寫自定義異常
// 此處為lombok註解 @Getter @AllArgsConstructor public enum ExceptionEnum { AUTH(1,"認證異常") ; private Integer code; private String msg; } public class AppException extends RuntimeException { public AppException(ExceptionEnum exceptionEnum) { super(exceptionEnum.getMsg()); } // 關鍵 @Override public Throwable fillInStackTrace() { return this; } public static void main(String[] args) { throw new AppException(ExceptionEnum.AUTH); } }
②.重寫fillInStackTrace方法
重寫該方法後,會只打印第一條資訊,這樣不僅可以節省日誌空間,方便檢視,更可以提高部分效能。
@Override public Throwable fillInStackTrace() { return this; }
③.列印內容
可以看到,列印內容明顯變少
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。