Skip to content

Latest commit

 

History

History
70 lines (49 loc) · 2.49 KB

0024-exception-and-realtime-error-tracking.md

File metadata and controls

70 lines (49 loc) · 2.49 KB

24. 实时错误跟踪

Date: 28/04/2017

Status

Accepted

Context

  1. 用户 A 使用功能 B,咦,出错了,怎么办呢,再试,还是不行,算了,不用了;又或者我报告一下吧,写邮件?;
  2. 项目 A 昨晚上线后出现了很多问题,怎么办呢,回滚还是赶快去解决呢?
  3. 用户发邮件说使用我们应用时出现错误了,错误描述不清晰,我们和用户沟通下吧,1小时过去了,还是重现不了,那我们去看看日志吧,翻出很久之前的日志,使用二分法慢慢查询,3 个小时过去了,终于定位出错误行啦,但是没有上下文及当时的环境变量等信息;
  4. 异常使用不规范。

Decision

使用 Sentry 对我们线上主要业务做异常监控。

  • 实时通知(sms, email, chat),推荐使用 slack;

  • 可定位具体的代码,包括错误栈信息;

  • 包含异常的环境变量信息。

  • 可主动上报信息;

  • 异常信息会聚合,了解当前异常优先级,避免被异常信息淹没;

  • 支持所有主流语言及对应的框架;

  • 配置非常简单,如,Django 集成

  • 价格合理,并且有每月1万条的免费限额。

规范化异常

使用异常的优势

  1. 隔离错误处理代码和常规代码;
  2. 在调用栈中向上传播错误;
  3. 归类和区分错误类型。

异常处理实践原则

  1. 使用异常,而不使用返回码;
  2. 利用运行时异常设定方法使用规则;
  3. 消除运行时异常;
  4. 正确处理检查异常;
  5. 使主流程代码保持整洁;
  6. 尽量处理最具体的异常,不能处理的异常请抛出来;
  7. 无法处理的异常却不能抛出时,通过日志记录详细异常栈,并返回给调用方友好的错误信息。

Consequences

Refs: