Date: 28/04/2017
Accepted
- 用户 A 使用功能 B,咦,出错了,怎么办呢,再试,还是不行,算了,不用了;又或者我报告一下吧,写邮件?;
- 项目 A 昨晚上线后出现了很多问题,怎么办呢,回滚还是赶快去解决呢?
- 用户发邮件说使用我们应用时出现错误了,错误描述不清晰,我们和用户沟通下吧,1小时过去了,还是重现不了,那我们去看看日志吧,翻出很久之前的日志,使用二分法慢慢查询,3 个小时过去了,终于定位出错误行啦,但是没有上下文及当时的环境变量等信息;
- 异常使用不规范。
-
实时通知(sms, email, chat),推荐使用 slack;
-
可定位具体的代码,包括错误栈信息;
-
包含异常的环境变量信息。
-
可主动上报信息;
-
异常信息会聚合,了解当前异常优先级,避免被异常信息淹没;
-
支持所有主流语言及对应的框架;
-
配置非常简单,如,Django 集成;
-
价格合理,并且有每月1万条的免费限额。
- 隔离错误处理代码和常规代码;
- 在调用栈中向上传播错误;
- 归类和区分错误类型。
- 使用异常,而不使用返回码;
- 利用运行时异常设定方法使用规则;
- 消除运行时异常;
- 正确处理检查异常;
- 使主流程代码保持整洁;
- 尽量处理最具体的异常,不能处理的异常请抛出来;
- 无法处理的异常却不能抛出时,通过日志记录详细异常栈,并返回给调用方友好的错误信息。
Refs: