开发者社区> 问答> 正文

java 自定义异常作为常量时,打印的异常信息不对 报错

"

问题描述

当把异常作为常量时,打印的异常调用链不对

相关代码

异常类

public class UserException extends RuntimeException {

    private static final long serialVersionUID = -1932290828991021225L;
    private State state;

    public UserException() {
        this.state = StateCode.SERVER_ERROR;
    }

    public UserException(String tip) {
        this.state = new State(StateCode.SERVER_ERROR.getCode(), tip);
    }

    public UserException(int errCode, String tip) {
        this.state = new State(errCode, tip);
    }

    public UserException(State state) {
        this.state = state;
    }

    public State getState() {
        return state;
    }

    public void setState(State state) {
        this.state = state;
    }
}

异常常量类

public interface TipExceptionConstants {

    TipException ENTITY_NOT_EXIST = new TipException("对象不存在");

    TipException NEED_LOGIN = new TipException("请用户登录");
}

测试类

@Slf4j
public class TestException {

    public static void main(String[] args){
        log.error("error : 10", TipExceptionConstants.ENTITY_NOT_EXIST);
        log.info("------------------------");
        log.info("------------------------");
        log.error("error : 13", TipExceptionConstants.NEED_LOGIN);
        log.info("------------------------");
    }
}

打印出来的log

cn.test.exception.TipException: null
    at cn.test.exception.TipExceptionConstants.<clinit>(TipExceptionConstants.java:11)
    at test.TestException.main(TestException.java:10)
17:02:45.249 [main] INFO test.TestException - ------------------------
17:02:45.249 [main] INFO test.TestException - ------------------------
17:02:45.249 [main] ERROR test.TestException - error : 13
cn.test.exception.TipException: null
    at cn.test.exception.TipExceptionConstants.<clinit>(TipExceptionConstants.java:12)
    at test.TestException.main(TestException.java:10)
17:02:45.249 [main] INFO test.TestException - ------------------------

你期待的结果是什么?实际看到的错误信息又是什么?

打印出来的堆栈调用链不对,两次调用链都是
at test.TestException.main(TestException.java:10)
第二个打印的异常log的调用链应该是第13行的代码,但是却显示了第一次打印的异常调用链。

" ![image.png](https://ucc.alicdn.com/pic/developer-ecology/0ddc1fce273b40f8870a08d1e0cdd007.png)

展开
收起
因为相信,所以看见。 2020-05-26 13:56:03 829 0
1 条回答
写回答
取消 提交回答
  • 阿里,我所有的向往

    "

    一般提醒内容作为字符串常量

    public final static String ENTITY_NOT_EXIST = "对象不存在"; 

    打印的时候,作为参数传进去

    log.error("error : 10", new UserException(TipExceptionConstants.ENTITY_NOT_EXIST));
    ######

    已经做成常量了,stack trace初始化的时候是什么以后就是什么了

    " ![image.png](https://ucc.alicdn.com/pic/developer-ecology/01f62a85fdb74002b365512094719fff.png)
    2020-05-27 10:17:18
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载