1. 程式人生 > 程式設計 >java自定義異常列印內容詳解

java自定義異常列印內容詳解

本文例項為大家分享了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;
  }

③.列印內容

可以看到,列印內容明顯變少

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。