Java 异常 自定义打印内容

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/LitongZero/article/details/102767740

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

③.打印内容

可以看到,打印内容明显变少

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/LitongZero/article/details/102767740
今日推荐