张晓波
2023-09-19 164694c47c35d6654df69b533e8dbf8b5423efc5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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();
        }
    }
}