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(); } } }