打印异常与Exception.getMessage

Des*_*PRG 25 java exception

是否有使用以下两个关于异常的代码的最佳实践.

//code1

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

//code2
} catch (SomeException e) {
    logger.error("Noinstance available!", e);
}
Run Code Online (Sandbox Code Playgroud)

我什么时候应该使用异常的getMessage方法?

Dav*_*INO 24

第一个不编译,因为该方法error接受String第一个参数和Throwable第二个参数.

e.getMessage()不是Throwable.

代码应该是

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

和....相比

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

第一个只打印一条消息.第二个也打印整个堆栈跟踪.

如果需要打印堆栈跟踪,则取决于上下文.

如果您已经知道为什么可以抛出异常,那么打印整个堆栈跟踪并不是一个好主意.

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

  • 我正在使用sl4j记录器,并且我的code1进行了编译。这是为什么 (3认同)