打印异常与异常。getMessage

2022-08-31 23:42:04

是否有关于异常的以下两段代码的最佳实践。

//code1

} catch (SomeException e) {
    logger.error("Noinstance available!", e.getMessage());
}

//code2
} catch (SomeException e) {
    logger.error("Noinstance available!", e);
}

何时应使用异常的 getMessage 方法?


答案 1

第一个不编译,因为该方法接受 as first 参数和 as second 参数。errorStringThrowable

e.getMessage()不是 .Throwable

代码应为

} catch (SomeException e) {
    // No stack trace
    logger.error("Noinstance available! " + e.getMessage());
}

相比

} catch (SomeException e) {
    // Prints message and stack trace
    logger.error("Noinstance available!", e);
}

第一个仅打印一条消息。第二个还打印整个堆栈跟踪。

这取决于上下文是否有必要打印堆栈跟踪。

如果您已经知道为什么会引发异常,那么打印整个堆栈跟踪不是一个好主意。

如果您不知道,最好打印整个跟踪跟踪以轻松找到错误。


答案 2

当您将异常分类为业务级别和技术异常时,此原型很有用。

对于业务级异常,您只需通过日志记录来使用消息进行分析,或者可能要在屏幕上显示含义信息(某些内容不起作用)。

对于技术异常,最好使用stacktrace记录错误,以找出问题,并且易于调试和解决。