[关闭]
@hopefrontEnd 2019-10-12T09:43:35.000000Z 字数 2966 阅读 2099

Sentry接入指南

Sentry是我们前端项目手机JS报错的系统,原来raven.js接入sentry方式逐渐被官方废弃,Sentry又没有中文的文档,笔者综合自己的实践总结下我们vue项目中sentry接入的问题,方便日后快速接入节省时间

前言

可能你需要了解下面的基本信息

DSN的获取

进入项目->进入配置->错误追踪->获取DSN

Jietu20190812-191549-HD.mp4 (3.56MB)

获取的auth

个人面板->API keys->创建新的令牌->勾选project:write

Jietu20190812-192259-HD.mp4 (3.71MB)

引入Sentry系列代码

首先安装依赖

  1. yarn add @sentry/browser @sentry/integrations
  2. yarn add @sentry/cli @sentry/webpack-plugin -D

@sentry/browser 是sentry官方的浏览器端JS SDK
@sentry/integrations JS框架集成包

配置Sentry信息

在Sentry中使用vue

  1. // app.js vue项目入口JS
  2. import * as Sentry from '@sentry/browser'
  3. import * as Integrations from '@sentry/integrations'
  4. // 如果当前环境为正式环境,在测试中我们可以改成dev
  5. if (process.env.VUE_APP_STATUS === 'prod') {
  6. Sentry.init({
  7. // dsn信息
  8. dsn: 'https://e85ca68d8d48495bbf8bc21679b13323@sentry.ymm56.com/32',
  9. integrations: [
  10. new Integrations.Vue({
  11. Vue,
  12. attachProps: true
  13. })
  14. ]
  15. })
  16. }

说明:
process.env.VUE_APP_STATUS 是我们的环境变量,设置可以参考vue-cli3关于环境变量的配置
如果是非vue-cli3项目可以使用cross-env

在init这个对象类我们可以下图所有的配识
1565607528541-7eb99935-6b1c-4a0b-adc2-f32d12053f0d.png#align=left&display=inline&height=790&name=image.png&originHeight=554&originWidth=335&search=&size=78390&status=done&width=478未知大小

这里我们配置好了之后可以在入口JS添加下面代码测试我们的是否配置Sentry成功、

  1. Sentry.captureException(new Error("Something broke"));

若看到当前的错误报告则代表配置成功
1565658065554-75047155-b6c0-4299-854e-a90379a03c2a.png#align=left&display=inline&height=69&name=image.png&originHeight=137&originWidth=460&search=&size=16449&status=done&width=230未知大小


配置sourcemap

Source map就是一个信息文件,里面储存着位置信息。也就是说,转换后的代码的每一个位置,所对应的转换前的位置。sentry收集上的错误是压缩过后的JS代码,我们并不能详细的获得出错信息,所以我们要想sentry系统中上传soucemap方便我们定位问题。

我们的项目大多数都是使用vue-cli3 ,所以我这里介绍下vue-cli3的配置,若有其他不同的webpack配置请参考
sentry的source-map配置

  1. //
  2. let configureWebpack = [
  3. new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)
  4. ]
  5. const SentryCliPlugin = require('@sentry/webpack-plugin')
  6. if (process.env.VUE_APP_STATUS === 'prod') {
  7. configureWebpack.push(
  8. new SentryCliPlugin({
  9. include: './dist', // sourcemap的文件目录
  10. debug: true, // 方便输出sentry-cli的信息查看,通过jenkins的时候有时候会莫名其妙的失败
  11. release: `release-${new Date()}`, // 版本信息
  12. urlPrefix: `~/shipper-pc`, // sourcemap匹配的线上JS地址~代表跟根目录
  13. ignore: ['node_modules'] // 忽略的JS脚本
  14. })
  15. )
  16. }

我们在运行打包脚本就会显示上传的进度
1565658672553-8e6c92c0-306c-436d-bf92-92ae050c5034.png#align=left&display=inline&height=102&name=image.png&originHeight=204&originWidth=2652&search=&size=327993&status=done&width=1326未知大小

注意:
urlPrefix 代表的JS文件对应的路径看,通过版本管理内可以看到,一定要检查和JS文件对应上!!!
1565657931425-e70e1536-084f-414c-a919-7a180c477d17.png#align=left&display=inline&height=64&name=image.png&originHeight=128&originWidth=442&search=&size=28352&status=done&width=221未知大小

再在根目录增加文件.sentryclirc,目的是通过sentry-cli上传的sourcemap文件都会根据这个文件的配置上传到指定项目

  1. [defaults]
  2. url = http://sentry.ymm56.com
  3. org = ymm
  4. project = shipper-pc
  5. [auth]
  6. token = 922cd9e49cf147169929b7017b0ed52fdda899b032584820a680bfb732f5b812

自己在制造一个错误就可以到sentry系统中看到详细的出错信息了
1565658196842-3ef202ef-3f93-4730-a903-14e03b7dcc37.png#align=left&display=inline&height=191&name=image.png&originHeight=382&originWidth=556&search=&size=84238&status=done&width=278未知大小

结尾

Sentry是一个强大的错误收集系统,本文只介绍了最基本的使用方法,有很多错误追踪及前置钩子希望大家多查看文档Sentry SDK,交流。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注