一、异常设计
异常设计主要考虑以下方面:
二、异常信息
异常信息包含:
- 错误码:异常的唯一编码。
- 错误描述:告知使用者和调用方的描述信息。
- 异常堆栈:Java 开发过程中,不可避免的会有未考虑的异常场景,堆栈信息可以帮助快速解决故障。
- 异常变量:错误描述中可替换的变量,变量的实际取值可以帮助快速查找错误原因,例如:
ERR-1001= 用户证件错误,用户 ID:{}
其中 ERR-1001 是错误码,后面是错误描述,{} 为可替换的变量,实际异常抛出时,可传入变量,由异常框架来统一处理。
三、异常分类
异常分类的作用是根据不同的异常类型可以走不同的处理分支,如果有这样的需要,可以对异常分类,否则可以不做区分,统一使用一个异常类则可。另外,通过对错误码分类也可以达到走不同处理分支目的,所以异常分类并不是必须的,而且定义多了使用时还得思考应该用哪一个,个人倾向简化处理。
四、处理策略
- 捕捉时机:在实际 Java 代码中,调用链可能如下:
那么异常该在哪里捕捉?
建议是:如果不因异常而改变处理逻辑,就不需要捕捉异常,一直向上抛,让公共框架统一处理然后返回给前端。这样做的好处是逻辑统一,也不需要伤脑筋思考到底要不要捕捉异常。
- 异常日志
有时候需要借助异常堆栈信息定位错误原因,而用户未必能记得和反馈错误堆栈信息,此时要么是自行复现错误来定位,要么是通过历史错误日志定位。通过错误日志定位就要将错误信息记录下来,一般通过文件日志记录,也可以采集后记录到数据库中,方便查询,入库时为了避免错误日志太多,可以考虑将堆栈信息的 hash 值也记录下来,对于 hash 值重复的异常,只需要更新最后发生时间,这样就能减少异常日志的大小。
- 异常界定
异常界定主要考虑查询不到数据时是否要作为异常返回,对此不应作为异常,而是由调用方自行判断是否要作为错误。
end.
站点:http://javashizhan.com/
微信公众号:
加入知识星球,参与讨论,更多实战代码分享!
https://t.zsxq.com/RNzfi2j