java自定義異常打印內(nèi)容詳解
本文實(shí)例為大家分享了java自定義異常打印內(nèi)容的具體代碼,供大家參考,具體內(nèi)容如下
背景:在開(kāi)發(fā)中,我們可能會(huì)使用到自定義異常,但是,這個(gè)自定義異常在打印日志時(shí),往往打印的內(nèi)容比較多。
1.自定義異常打印內(nèi)容
可以看到,雖然我們使用的是自定義異常,但是當(dāng)拋出時(shí),還是會(huì)打印出堆棧的全部信息。
2.查看源碼
通過(guò)查看源碼,我們可以得知,當(dāng)拋出異常時(shí),程序會(huì)調(diào)用此異常的fillInStackTrace方法,但是,大部分異常都沒(méi)有對(duì)該方法做處理?;臼钦{(diào)用super的方法。
可以看到,此方法的父類實(shí)現(xiàn),是在Throwable類中。而且此方法加了synchronized鎖,查看堆棧的信息。那么必然會(huì)影響性能。
底層實(shí)現(xiàn)是native,調(diào)用C語(yǔ)言的方法。
3.解決方法
①.編寫(xiě)自定義異常
// 此處為lombok注解 @Getter @AllArgsConstructor public enum ExceptionEnum { AUTH(1, "認(rèn)證異常") ; private Integer code; private String msg; } public class AppException extends RuntimeException { public AppException(ExceptionEnum exceptionEnum) { super(exceptionEnum.getMsg()); } // 關(guān)鍵 @Override public Throwable fillInStackTrace() { return this; } public static void main(String[] args) { throw new AppException(ExceptionEnum.AUTH); } }
②.重寫(xiě)fillInStackTrace方法
重寫(xiě)該方法后,會(huì)只打印第一條信息,這樣不僅可以節(jié)省日志空間,方便查看,更可以提高部分性能。
@Override public Throwable fillInStackTrace() { return this; }
③.打印內(nèi)容
可以看到,打印內(nèi)容明顯變少
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java使用this調(diào)用構(gòu)造函數(shù)的實(shí)現(xiàn)方法示例
這篇文章主要介紹了java使用this調(diào)用構(gòu)造函數(shù)的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了java面向?qū)ο蟪绦蛟O(shè)計(jì)中函數(shù)調(diào)用相關(guān)操作技巧,需要的朋友可以參考下2019-08-08Java中this和super的區(qū)別及this能否調(diào)用到父類使用
這篇文章主要介紹了Java中this和super的區(qū)別及this能否調(diào)用到父類使用,this和super都是Java中常見(jiàn)的關(guān)鍵字,下文關(guān)于兩者區(qū)別介紹,需要的小伙伴可以參考一下2022-05-05引入mybatis-plus報(bào) Invalid bound statement錯(cuò)誤問(wèn)題的解決方法
這篇文章主要介紹了引入mybatis-plus報(bào) Invalid bound statement錯(cuò)誤問(wèn)題的解決方法,需要的朋友可以參考下2020-05-05Java中語(yǔ)音url轉(zhuǎn)換成InputStream的示例代碼
在Java中,可以使用java.net.URL和java.net.URLConnection類來(lái)將語(yǔ)音URL轉(zhuǎn)換為InputStream,本文通過(guò)示例代碼介紹Java中語(yǔ)音url轉(zhuǎn)換成InputStream的相關(guān)知識(shí),感興趣的朋友一起看看吧2024-01-01SpringBoot讀取properties配置文件中的數(shù)據(jù)的三種方法
本文主要介紹了SpringBoot讀取properties配置文件中的數(shù)據(jù)的三種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06Java Thread之Sleep()使用方法總結(jié)
這篇文章主要介紹了Java Thread之Sleep()使用方法總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05