vue项目前端错误收集之sentry教程详解


Posted in Javascript onMay 27, 2019

sentry简介

Sentry 是一个开源的错误追踪工具,可以帮助开发人员实时监控和修复系统中的错误。其专注于错误监控以及提取一切事后处理所需的信息;支持几乎所有主流开发语言( JS/Java/Python/php )和平台, 并提供了web来展示输出错误。

sentry官网: https://sentry.io/

sentry安装

sentry 是一个开源的工具,可以自行搭建。

官方支持两种安装和运行 Sentry 服务器的方法, Docker 和 Python 。推荐使用 Docker 。

当然,对于刚开始接触 sentry 的同学,也可以直接使用官方提供的免费服务,但是有一些限制。

下面先来介绍一下利用官方的免费服务,在前端项目中如何使用 sentry 。

如何在项目中使用sentry

1.首先需要在 sentry 的官网注册一个账号。注册完选择新建一个项目, sentry 支持多种框架,在其中选择 vue 创建项目。我创建了一个名为test的项目。

vue项目前端错误收集之sentry教程详解 

 1. 创建项目页面会自动跳转到如何配置vue项目页面。接下来就按照指引在vue代码里引入 sentry 。可以通过 cdn 或者 npm 引入。我们采用 npm 引入。引入的时候需要给 init 函数传递一个 dsn 参数。这个参数唯一指定了我们刚才创建的项目,在创建项目的时候系统会自动生成。如果不传这个参数, sentry 不会发送错误。

// main.js
import * as Sentry from '@sentry/browser';
import * as Integrations from '@sentry/integrations';
// 在生产环境中让sentry报错
process.env.NODE_ENV === "production" && Sentry.init({
 dsn: 'https://1111a5bc59b54778b75f4e3a92f2e462@sentry.io/1447145',
 integrations: [
 new Integrations.Vue({
  Vue,
  attachProps: true,
 }),
 ],
});

在项目跟目录下增加.sentryclirc文件,其中的token可以在左上角头像里的api keys里面获取。

[auth]
token="your token"

[defaults]
url = https://sentry.io
org = "your org"
project = test

然后我们在代码里制造一个错误,就可以让 sentry 捕获了。本地如何模拟线上环境访问dist下的文件呢?需要装一个 http-server ,在dist文件夹下启动一个http服务就可以了。

npm i http-server 
cd dist
http-server -p 8888

注意:sentry捕获到的错误不会在打印在控制台中。

在network中可以看到, sentry 发送了一个错误请求,请求参数如下:

vue项目前端错误收集之sentry教程详解 

接下来我们就可以在后台看到刚才上传的错误信息,同时 sentry 也会给你的邮箱发送一封错误邮件。

错误信息查看

在后台找到我们的test项目,点击进去就能看到多了一条错误信息。

vue项目前端错误收集之sentry教程详解 

点击信息可以进入信息详情进行查看。

vue项目前端错误收集之sentry教程详解 

但是这个错误信息是压缩后的,不能定位到代码的实际位置。使用意义不大,因此需要上传 source-map 。

上传source-map

上传的方式有多种。可以通过 sentry-cli 通过命令行的方式来上传 source-map ,但是需要手动上传。也可以采用 webpack-plugin 这个插件,可以在 build 的同时自动上传 source-map 。本文采用自动上传策略。

项目配置:

// webpack.prod.conf
const SentryCliPlugin = require("@sentry/webpack-plugin");
plugins:[
 new SentryCliPlugin({
  include: "./dist",
  release: process.env.RELEASE_VERSION,
  configFile: "sentry.properties"
 })
]
// main.js
Sentry.init({
 dsn: "https://4ec86726f2ba40338f66837c6b959eed@sentry.io/1447158",
 integrations: [
  new Integrations.Vue({
   Vue,
   attachProps: true
  }),
  new Integrations.RewriteFrames()
 ],
 release: process.env.RELEASE_VERSION
});
// prod.env.js
"use strict";
const release = "test-1";
process.env.RELEASE_VERSION = release;
module.exports = {
 NODE_ENV: '"production"',
 RELEASE_VERSION: `"${release}"`
};

需要保证 plugins 和 Sentry.init 两个配置中的 release 版本号相同,这样的话 sentry 才能将 source-map 文件一一对应上。

修改完之后我们重新build一下项目,build的过程比较慢:

vue项目前端错误收集之sentry教程详解 

之后我们去后台可以看见在版本中多了一个 test-1 版本,也就是我们刚刚上传的版本。

vue项目前端错误收集之sentry教程详解 

点进去可以看见我们刚才上传的 source-map 文件。

vue项目前端错误收集之sentry教程详解 

这时我们重新触发一次错误,就可以看到具体的出错位置了。

vue项目前端错误收集之sentry教程详解 

sentry关联github

在设置->集成里面可以设置 sentry 关联各种服务,如 github、jira 等。关联上 github 后,可以直接为该异常创建issue。

vue项目前端错误收集之sentry教程详解 

这样在该异常的详情页就可以创建issue到 sentry 这个仓库了。

vue项目前端错误收集之sentry教程详解 

创建时可以选择仓库,名称,详情及指定给谁:

vue项目前端错误收集之sentry教程详解 

打开 github ,在 sentry 这个仓库下,发现多了一个issue,就是刚才我们创建的。

vue项目前端错误收集之sentry教程详解 

在我们向 github 提交 commit 的时候,如果加上了异常的id,例如这样:

vue项目前端错误收集之sentry教程详解 

git commit -m 'Fixes TEST-3'

这样在下次发版 build 的时候, sentry 会自动将该异常的状态从 unresolved 变成 resolved ,并会给出本次提交的 diff 地址。

vue项目前端错误收集之sentry教程详解 

搭建sentry服务

官方给出的有两种方法可以自行搭建sentry:

•python
•docker

推荐使用docker。下面来介绍一下通过docker如何搭建sentry。

首先需要下载docker

mac桌面版地址: https://hub.docker.com/editions/community/docker-ce-desktop-mac

其中已经集成了docker命令行、docker-compose等。

然后需要去github拉取 Sentry On-Premise ,这个是官方提供的通过docker安装sentry的仓库,里面介绍了如何一步一步搭建sentry。

创建服务步骤:

cd onpremise
// 创建本地数据库
docker volume create --name=sentry-data && docker volume create --name=sentry-postgres
// 创建环境配置文件
cp -n .env.example .env 
// 构建docker服务
docker-compose build
// 产生秘钥,将其作为SENTRY_SECRET_KEY加入到.env文件中
// 创建数据库,用交互式的提示生成管理员账号
docker-compose run --rm web upgrade
// 启动所有服务
docker-compose up -d

如果过程一切正常的话,现在访问localhost:9000就能看到sentry的登录页面了,用刚才生成的管理员账号密码登录即可。

vue项目前端错误收集之sentry教程详解 

以后的操作就跟上面介绍的一样了。

注意事项

1.利用本地搭建的sentry创建项目的时候,发现dsn那一栏是空的,系统并没有自动生成。需要自己拼接这个dsn。它由以下几部分组成,分别是协议、公钥、私钥、主机、路径(一般为空)、项目id。
'{PROTOCOL}://{PUBLIC_KEY}:{SECRET_KEY}@{HOST}/{PATH}{PROJECT_ID}'
//类似这样,把它放在sentry.init中的dsn即可

http://4cf10206ef27409bbb64f68b:a67a0eb5513e43ab883af3f3@localhost:9000/2

总结

以上所述是小编给大家介绍的vue项目前端错误收集之sentry教程详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jQuery中noconflict函数的实现原理分解
Feb 03 Javascript
php结合imgareaselect实现图片裁剪
Jul 05 Javascript
javascript HTML5 canvas实现打砖块游戏
Jun 18 Javascript
jQuery判断是否存在滚动条的简单方法
Sep 17 Javascript
Bootstrap基本模板的使用和理解1
Dec 14 Javascript
Bootstrap入门教程一Hello Bootstrap初识
Mar 02 Javascript
原生JavaScript实现Tooltip浮动提示框特效
Mar 07 Javascript
vue修改vue项目运行端口号的方法
Aug 04 Javascript
Vue服务器渲染Nuxt学习笔记
Jan 31 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
Jul 06 Javascript
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
Sep 03 Javascript
js之切换全屏和退出全屏实现代码实例
Sep 09 Javascript
了解javascript中变量及函数的提升
May 27 #Javascript
基于vue实现一个禅道主页拖拽效果
May 27 #Javascript
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
May 27 #jQuery
初学node.js中实现删除用户路由
May 27 #Javascript
jquery实现动态创建form并提交的方法示例
May 27 #jQuery
jquery实现动态改变css样式的方法分析
May 27 #jQuery
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
May 27 #Javascript
You might like
PHP取二进制文件头快速判断文件类型的实现代码
2013/08/05 PHP
PHP中的表达式简述
2016/05/29 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
2017/10/19 PHP
利用Laravel生成Gravatar头像地址的优雅方法
2017/12/30 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
javascript 数组的方法集合
2008/06/05 Javascript
jquery ajax 简单范例(界面+后台)
2013/11/19 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
JavaScript让网页出现渐隐渐显背景颜色的方法
2015/04/21 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
原生JS获取元素集合的子元素宽度实例
2016/12/14 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
2017/07/17 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
2018/09/21 Javascript
微信小程序如何调用json数据接口并解析
2019/06/29 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
python函数局部变量用法实例分析
2015/08/04 Python
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
python 删除列表里所有空格项的方法总结
2018/04/18 Python
wxPython色环电阻计算器
2019/11/18 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
利用pyecharts读取csv并进行数据统计可视化的实现
2020/04/17 Python
Django权限设置及验证方式
2020/05/13 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
Python 必须了解的5种高级特征
2020/09/10 Python
戴森美国官网:Dyson美国
2016/09/11 全球购物
斯凯奇新西兰官网:SKECHERS新西兰
2018/02/22 全球购物
比较基础的php面试题及答案-填空题
2014/04/26 面试题
写自荐信三大法宝
2014/01/24 职场文书
捐款感谢信
2015/01/20 职场文书
鼋头渚导游词
2015/02/05 职场文书
2016年习主席讲话学习心得体会
2016/01/20 职场文书
《跨越海峡的生命桥》教学反思
2016/02/18 职场文书
SQLServer 日期函数大全(小结)
2021/04/08 SQL Server