Flutter Sentry异常捕获插件接入及使用

优势

  • 实时事件的日志聚合平台:专门监测错误并提取所有有用信息用于分析,不再麻烦地依赖用户反馈来定位问题
  • 覆盖大部分的主流编程语言与框架
  • 在CD的灰度发布环节应用Sentry,灰度-Sentry捕获异常-自动停止灰度
  • 杜绝了回滚带来的不好形象,同时也能缩短问题发现的周期

Use this library in your Dart programs (Flutter for mobile, Flutter for web, command-line, and AngularDart) to report errors thrown by your program to https://sentry.io error tracking service.

插件入口 > https://pub.flutter-io.cn/packages/sentry

环境搭建

以下是Docker搭建Sentry平台的步骤,请保证每一步执行完成:

  • 启动一个 Redis 容器:
$ docker run -d --name sentry-redis redis
  • 启动一个 Postgres 容器
$ docker run -d --name sentry-postgres -e POSTGRES_PASSWORD=secret -e POSTGRES_USER=sentry postgres
  • 生成一个密钥,用于在后面所有sentry容器之间握手。请记住这串密钥,在后面的docker命令中,密钥需要以环境变量形式传入。
$ docker run --rm sentry config generate-secret-key
  • 连接Redis、Postgres和Sentry,运行后会自动执行初始化操作:
$ docker run -it --rm -e SENTRY_SECRET_KEY='<secret-key>' --link sentry-postgres:postgres --link sentry-redis:redis sentry upgrade

-启动 Sentry Server,同时添加端口映射。Sentry的端口为9000,可以使用 -p 9000:9000 参数,在启动后可以通过访问http://localhost:9000http://host-ip:9000进入Sentry的web管理页面:

$ docker run -d --name my-sentry -p 9000:9000 -e SENTRY_SECRET_KEY='<secret-key>' --link sentry-redis:redis --link sentry-postgres:postgres sentry
  • 默认配置中需要Celery,因此启动一个Celery 主节点与执行节点(worker节点可按需多启几个):
$ docker run -d --name sentry-cron -e SENTRY_SECRET_KEY='<secret-key>' --link sentry-postgres:postgres --link sentry-redis:redis sentry run cron
$ docker run -d --name sentry-worker-1 -e SENTRY_SECRET_KEY='<secret-key>' --link sentry-postgres:postgres --link sentry-redis:redis sentry run worker

Sentry配置

进入Web管理页面后,按照提示配置管理员账号密码与其他信息。注意:URL填写你所访问的地址,如http://host-ip:9000

配置成功后,按顺序进入Project-internal-Setting页面, 选择右侧Release标签


image.png

复制WEBHOOK中的curl命令,打开终端发送请求,即可在页面上看到测试的错误日志信息:

image.png

项目使用

1.导入插件依赖库

sentry: 3.0.1

2.使用

import 'package:sentry/sentry.dart' as Sentry;
var sentry = Sentry.SentryClient(dsn: Config.sentryDSN);

/// sentry
initSentry();
void initSentry() {
  SessionStorage.sentry = sentry;
}
// sentry
SessionStorage.sentry.userContext =
  Sentry.User(id: user.uid.toString());
onError: (Object error, StackTrace stackTrace) {
    try {
      sentry.captureException(
        exception: error,
        stackTrace: stackTrace,
      );
      print('Error sent to sentry.io: $error');
    } catch (e) {
      print('Sending report to sentry.io failed: $e');
      print('Original error: $error');
    }
  },
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文包括Sentry平台的介绍,以及环境搭建两部分,更多细节请查阅官方文档。 简介 Sentry是一个实时事件的日...
    严北阅读 34,742评论 4 27
  • 简介 Sentry是一个实时事件的日志聚合平台,可以实时检测程序异常错误并发出报警通知,帮助开发人员快速定位问题。...
    利来有道阅读 1,903评论 0 0
  • 背景 为了捕获前端应用的用户信息以及前端应用异常,用于用户行为分析、前端异常分析。主流的成熟实现方案及技术组件就是...
    do_young阅读 4,972评论 5 10
  • sentry官方推荐docker方式安装,使用到了docker-compose,docker至少是1.10.3以上...
    雄柱阅读 940评论 0 0
  • 简介 sentry是一个人性化收集&定位&定格程序错误的工具。说白了就是在网页上就能看到你的错误栈信息,和各种当时...
    weidwonder阅读 2,535评论 0 1