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)文章
Spring Boot 通過(guò)注解實(shí)現(xiàn)數(shù)據(jù)校驗(yàn)的方法
這篇文章主要介紹了Spring Boot 通過(guò)注解實(shí)現(xiàn)數(shù)據(jù)校驗(yàn)的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
java使用RestTemplate封裝post請(qǐng)求方式
這篇文章主要介紹了java使用RestTemplate封裝post請(qǐng)求方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
springboot如何通過(guò)注解實(shí)現(xiàn)多線程
在Spring Boot中實(shí)現(xiàn)異步方法時(shí),如果直接在調(diào)用類中使用`@Async`注解,可能會(huì)導(dǎo)致異步失敗,正確的做法是將實(shí)現(xiàn)異步的方法放在一個(gè)獨(dú)立的類中,并通過(guò)Spring生成的bean來(lái)調(diào)用這個(gè)方法,這樣可以成功實(shí)現(xiàn)異步2024-12-12
使用Java Collections實(shí)現(xiàn)集合排序的全面指南
在Java編程中,集合(Collection)是處理數(shù)據(jù)的重要工具之一,Java集合框架提供了豐富的接口和類來(lái)操作數(shù)據(jù)集合,而排序是其中最常見(jiàn)的操作之一,本文將詳細(xì)介紹如何使用Collections類對(duì)集合進(jìn)行排序,并深入探討其背后的原理和使用場(chǎng)景,需要的朋友可以參考下2025-02-02
詳解Java如何優(yōu)雅的調(diào)用dubbo同時(shí)不使用其它jar包
這篇文章主要介紹了如何在不使用他人jar包的情況下優(yōu)雅的進(jìn)行dubbo調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-02-02
mybatis項(xiàng)目CRUD步驟實(shí)例詳解
這篇文章主要介紹了mybatis項(xiàng)目CRUD步驟,包括pom.xml引入相應(yīng)的依賴,在resources目錄下寫(xiě)配置文件,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09

