public static void main(String[] args) {
try {
ttt();
} catch (Exception e) {
logger.error("err", e);
}
}
public static void ttt() {
try {
ttt2();
} catch (Exception e) {
logger.error("err", e);
throw e;
}
}
public static void ttt2() {
int count = 1 / 0;
}
catch后打印e
catch后不打印e
结论?
如果项目代码里面有统一异常处理
,
如spring的 @ControllerAdvice
. @ExceptionHandler(BindException.class)
中打印了整个异常堆栈.
我们在业务方法里面logger一次e,会导致重复打印,日志不好看。
所以只需要在统一异常处理/业务方法中 选其一:
- 如果没有
统一异常处理
,还是业务方法打印e比较好; - 如果有,那可以只打印相关错误信息,或者直接throw原来的,不要catch以后,只打印原ex, 又不做其他任何处理,继续抛出新的,会造成日志打印多一层(仅供参考)
public static void ttt(String param) {
try {
ttt2();
} catch (Exception e) {
// catch后
logger.error("err. param:{}", param);
throw new RuntimeException("hello err");
}
}