记一次日志被吞,只有异常类型,没有堆栈信息

一背景:

        开发企业微信小程序,需要判断当前购买企业购买的版本是试用版还是付费版

二现象:

        Exception in thread "main" java.lang.NullPointerException 只打印了异常信息,无详细堆栈信息,导致无法判断具体是那行代码出现了空对象。

完整信息应该有以下堆栈信息

Exception in thread "main" java.lang.NullPointerException
	at com.aerosoft.Test.main(Test.java:18)
三简略代码:
Integer type = qyWxService.getQyWxType(corpid);
    switch (type){
        case 0:
            doXX();
            break;
        case 1:
            doX();
            break;
        default:
            break;
}
四解决办法:

       方法一:当时是down了一份线上数据,在本地运行代码发现type为空,修复后重新发布。

       方法二:启动命令加入 -XX:-OmitStackTraceInFastThrow  关闭jdk1.5对多次重复出现的异常进行预编译,这些预编译的异常无堆栈信息,故无法打印完整堆栈。需注意是关闭FastThrow在大量抛出异常时可能会有意想不到的性能问题,比如一些JDK或者依赖库依赖异常来保证逻辑正确。

五参考资料:

异常堆栈缺失与OmitStackTraceInFastThrow - 知乎

你可能感兴趣的:(日志,线上问题,后端)