package com.thhy.general.exception;
|
|
import com.thhy.general.common.BasicStatus;
|
import com.thhy.general.common.IBasicStatus;
|
import com.thhy.general.utils.UUIDUtils;
|
import lombok.Data;
|
import lombok.EqualsAndHashCode;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
|
import java.io.PrintWriter;
|
import java.io.StringWriter;
|
|
/**
|
* @Author: zhang_xiao_bo
|
* @Date: 2022/3/22 11:11
|
* @description: 基础项目自定义异常
|
*/
|
@Data
|
@EqualsAndHashCode(callSuper=true)
|
public class BasicException extends RuntimeException{
|
|
private static final Logger logger = LoggerFactory.getLogger(BasicException.class);
|
|
private IBasicStatus basicStatus;//状态码
|
private String errorLogId;//异常日志编码
|
private String stackTraceMsg="";//异常堆栈
|
/**
|
* 主动创建异常
|
* @param basicStatus
|
*/
|
public BasicException(IBasicStatus basicStatus){
|
super(basicStatus.statusMsg());
|
this.basicStatus=basicStatus;
|
this.errorLogId= UUIDUtils.create();
|
}
|
|
public static void main(String[] args) {
|
|
}
|
|
/**
|
* 传递底层异常堆栈
|
* @param basicStatus
|
* @param exception
|
*/
|
public BasicException(IBasicStatus basicStatus, Exception exception){
|
super(basicStatus.statusMsg());
|
this.errorLogId= UUIDUtils.create();
|
this.stackTraceMsg=getInfo(exception);
|
//如果捕获的是自定义异常,则类型定为源异常,否则使用捕获时异常
|
if(exception instanceof BasicException){
|
this.basicStatus=((BasicException) exception).basicStatus;
|
}else{
|
this.basicStatus=basicStatus;
|
}
|
}
|
/**
|
* 传递底层异常堆栈
|
* @param exception
|
*/
|
public BasicException(Exception exception){
|
super(exception.getMessage());
|
this.errorLogId= UUIDUtils.create();
|
this.stackTraceMsg=getInfo(exception);
|
//如果捕获的是自定义异常,则类型定为源异常,否则使用捕获时异常
|
if(exception instanceof BasicException){
|
this.basicStatus=((BasicException) exception).basicStatus;
|
}else{
|
this.basicStatus= BasicStatus.ERROR;
|
}
|
}
|
/**
|
* 获取异常的堆栈信息
|
*
|
* @param t
|
* @return
|
*/
|
public String getInfo(Throwable t) {
|
StringWriter sw = new StringWriter();
|
PrintWriter pw = new PrintWriter(sw);
|
try {
|
t.printStackTrace(pw);
|
return sw.toString();
|
} finally {
|
pw.close();
|
}
|
}
|
}
|