logo头像
书院的十三先生

Web全栈应用之旅-基础篇(二)异常设计

一、异常设计

异常设计主要考虑以下方面:

二、异常信息

异常信息包含:

  1. 错误码:异常的唯一编码。
  2. 错误描述:告知使用者和调用方的描述信息。
  3. 异常堆栈:Java开发过程中,不可避免的会有未考虑的异常场景,堆栈信息可以帮助快速解决故障。
  4. 异常变量:错误描述中可替换的变量,变量的实际取值可以帮助快速查找错误原因,例如:
    1
    ERR-1001=用户证件错误,用户ID:{}

其中ERR-1001是错误码,后面是错误描述,{}为可替换的变量,实际异常抛出时,可传入变量,由异常框架来统一处理。

三、异常分类

异常分类的作用是根据不同的异常类型可以走不同的处理分支,如果有这样的需要,可以对异常分类,否则可以不做区分,统一使用一个异常类则可。另外,通过对错误码分类也可以达到走不同处理分支目的,所以异常分类并不是必须的,而且定义多了使用时还得思考应该用哪一个,个人倾向简化处理。

四、处理策略

  1. 捕捉时机:在实际Java代码中,调用链可能如下:

    那么异常该在哪里捕捉?
    建议是:如果不因异常而改变处理逻辑,就不需要捕捉异常,一直向上抛,让公共框架统一处理然后返回给前端。这样做的好处是逻辑统一,也不需要伤脑筋思考到底要不要捕捉异常。
  2. 异常日志
    有时候需要借助异常堆栈信息定位错误原因,而用户未必能记得和反馈错误堆栈信息,此时要么是自行复现错误来定位,要么是通过历史错误日志定位。通过错误日志定位就要将错误信息记录下来,一般通过文件日志记录,也可以采集后记录到数据库中,方便查询,入库时为了避免错误日志太多,可以考虑将堆栈信息的hash值也记录下来,对于hash值重复的异常,只需要更新最后发生时间,这样就能减少异常日志的大小。
  3. 异常界定
    异常界定主要考虑查询不到数据时是否要作为异常返回,对此不应作为异常,而是由调用方自行判断是否要作为错误。

end.


站点: http://javashizhan.com/


微信公众号:


加入知识星球,参与讨论,更多实战代码分享!
https://t.zsxq.com/RNzfi2j