您好,登錄后才能下訂單哦!
本文實例為大家分享了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; }
③.打印內容
可以看到,打印內容明顯變少
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。