异常处理最佳实践
1.不要生吞异常,应输出日志或继续抛出来
-
- 原因:无法查到异常日志,导致问题跟踪时候存在难以跟踪的诡异现象
2.如果不知要异常要怎样处理,就继续抛出留给上层来处理
-
- 原因:有一些异常在底层不知道如何处理,业务逻辑清晰后会有人知道怎么来处理。
- 案例:HTTP 请求可能会产生SocketTimeoutException,客户端不确定是否需要重试时可以抛出异常,留给业务来判断是否重试
3.不要捕获 Exception 这样的通用异常,应捕获特定异常
-
- 原因:会捕获掉 RuntimeError,响外部监控报警
- 原因:损害代码可读性
- 案例:监控平台会对OOM进行监控报警
4.不要将日志输出到标准错误流,应输出到日志系统
-
- 原因:在实际生产环境,无法判断标准错误流到底输出到哪
5.异常中应避免敏感信息
-
- 原因:存在隐私泄露风险
- 案例:携程用户支付日志被下载导致用户信用卡密码泄露
6.异常应尽量早的抛出
-
- 原因:没有在故障第一现场抛出可能会导致排查时搞不清楚异常真正源头
7.异常应避免多次记录
-
- 原因:多处出现异常可能会导致排查时搞不清楚异常真正源头
8.不要滥用异常
-
- 原因:trycatch 会在影响 JVM 对性能优化的预判
- 原因:每次实例会 Exception 都会对栈进行快照,开支严重
- 案例:应在 if 中检查 对象是否为空,而非捕获 NPE
9.业务异常:有明确业务语义的异常,应按照业务逻辑进行处理(例如:参数异常,业务逻辑异常)。
1302

被折叠的 条评论
为什么被折叠?



