上一篇介绍了sentry的基本用法,任意门:sentry(一)初探

今天我们再接着熟悉sentry,按照上一篇的教程我们可以在自己的项目里面安装sentry的sdk,而且写了一个异常的例子来触发异常,在sentry后台就能监控到异常了,但我们可能会遇到其他的问题。

前端发布上线为了js体积与请求的开支,通常会合并、混淆js代码,这样导致代码报错了,我们也只能看到错误信息,但非常难定位到具体是哪行代码出现的错误,如图:

我们无法快速定位到代码哪一行出错,这样即使知道报错也让很多开发人员无法下手,所以这一篇主要和大家探讨怎样将出错与我们开发中的代码结合起来,这里sentry采取的是业界方案:sourcemap。

什么是sourcemap, 阮一峰这篇写的非常详细了http://www.ruanyifeng.com/blog/2013/01/javascript_source_map.html,今天我们重点讲讲sentry怎么集成sourcemap以及需要注意的问题。

安装webpackplugin与配置

为了解决上面的问题,sentry给出了集成sourcemap的方案,从sourcemap生成到上传,sentry官方推荐的是用webpack场景下的webpackplugin。

第一步:安装SentryWebpackPlugin插件

$ npm install --save-dev @sentry/webpack-plugi

第二步:在项目根目录增加一个

.sentryclirc文件来做相应的配置:

[defaults]
project=react-test
org=sentry
url=http://localhost:9000[auth]
token=851d20d9e7e943b191df663643d13f89d8fb6c2d12584c729d0e29f831ec1fd1

这4个属性是必填项,这里重点讲一下这4个属性。

org可以在sentry的后台查。

project是当时在生成sentry sdk的时候建立的名字

url是sentry的后台地址,我是本机自建所以是:localhost:9000

token需要到后台生成:

对于更多的可选配置属性可以参考https://docs.sentry.io/cli/configuration/

第三步:在webpack.config.js增加SentryWebpackPlugin的插件配置

const SentryWebpackPlugin = require("@sentry/webpack-plugin");module.exports = {// other configurationconfigureWebpack: {plugins: [new SentryWebpackPlugin({include: ".", ignore: ["node_modules", "webpack.config.js"],configFile: "sentry.properties",}),],},
};

include, ignoreFile, ignore, configFile 是官方文档demo上的属性,

其中只有include是必填项,其他都是可选。

include:指定路径让sentry-cli来检测有没有.map与.js文件,如果有就会上传到sentry。

需要关注的可选的属性:

ignore: 忽略文件夹或文件不要被检测。 一般都会将node_moudules与webpack.config.js忽略掉。

configFile: "sentry.properties", 这是用来替代第二步的.sentryclirc文件。

如果根项目有一个sentry.properties文件

defaults.project=react-test
defaults.org=sentry
defaults.url=http://localhost:9000
auth.token=851d20d9e7e943b191df663643d13f89d8fb6c2d12584c729d0e29f831ec1fd1

这个起的作用与.sentryclirc是一致的。

但至于为什么需要两种方式就不知道作者的用意了,如果知道的同学记得给我留言。

sentry-plugin插件还有很多属性,大家可以参考

https://github.com/getsentry/sentry-webpack-plugin

第四步:output配置

output:{filename:"[name].js",path:path.resolve(__dirname, 'dist/'),sourceMapFilename: "[name].js.map"},

增加sourceMapFilename,用于上传到sentry。

上传sourcemap

我们的project是基于react来建立的,这里我写一个react的demo。目录如下:

index.js内容

import React from 'react';
import ReactDOM from 'react-dom';
import * as Sentry from '@sentry/react';
import { Integrations } from '@sentry/tracing';
import App from './App';Sentry.init({dsn: "http://c4e5aad16fc942bbaec0dd3ef3903a72@localhost:9000/5",integrations: [new Integrations.BrowserTracing(),],tracesSampleRate: 1.0
});ReactDOM.render(<App /> , document.getElementById("root"));

这里需要造一个异常来验证,我们在app.js里面不import Footer组件,但在 render的时候调用了<Footer/>

import React from 'react';
import Header from './components/header';
import Body from './components/body';
class App extends React.Component {render() {return <div> <Header/><Body/><Footer/></div>}
}

代码准备好后,我们开始测试一下,在终端执行下

webpack -p

我们访问下那个有异常的页面可以看到如下错误,因为Footer未被引入,所以是未定义的。

接着到sentry后台去看下有没有报错记录

这个报错与浏览器报的一致

进入详细页面如下:

我们可以看到与之前不同的是,sourcemap上传到sentry后,sentry通过压缩的js的sourcemap标记与上传的sourcemap,源js做了一个映射,再通过错误的行和列真正定位到代码的错误, 这一块对于开发人员排错是非常方便的。
在这里我们能马上就定位到错误是Footer未定义了。

我们继续看错误详情页的其他信息:

这里有一个release的标记,从官网得知每次上传sourcemap其实就是一次release的过程, 如果没有在sentry初始化时定义release属性,sentry插件会自动生成一个随机数作为release版本。如果需要指定版本,记得在sentry初始化和webpack.config.js配置的需要一致。
初始化:

Sentry.init({dsn: "http://c4e5aad16fc942bbaec0dd3ef3903a72@localhost:9000/5",release:"v1.0.1",integrations: [new Integrations.BrowserTracing(),],tracesSampleRate: 1.0
});

webpack的插件配置

new SentryWebpackPlugin({release:"v1.0.1",include: ".",ignore: ["node_modules", "webpack.config.js"],configFile: "sentry.properties"})

到了这里,我们已经完成了webpack项目与sentry的sourcemap的集成,

对于非webpack的项目,官网介绍了一个通过sentry-cli命令来手动做配置与上传sourcemap的方式,这里就不展开讲了,感兴趣的同学可以读这篇文章

https://docs.sentry.io/platforms/javascript/guides/react/configuration/sourcemaps/

总结

上一篇我们介绍了sentry的安装与用法,sentry(一)初探

这一篇我们又讲了与sourcemap的集成,从报错到清晰地定位错误已经完成了一个闭环,这时候你可以向公司申请一个服务器把sentry搭起来并开始做异常监控了,但sentry是否可以完全满足我们异常监控的需求还需要更多的使用和实践,它可能还有哪些坑需要我们一一来填补,后续我们会再同步sentry的更多的特性,欢迎大家一键三连。

更多内容欢迎大家关注:大前端工程师

sentry 命令_sentry(二)集成sourcemap相关推荐

  1. sentry 命令_sentry服务搭建

    简介 sentry 是目前比较流行的日志上报告警平台,集成多语言sdk,非常方便集成,而且它专门监测错误并提取开发日志信息用于分析,通过自动上报及获取免去了需要用户提供日志定位问题的烦恼,极大的提高了 ...

  2. sentry 命令_Sentry 错误预警系统的运维

    last modified by coder4 , 2019/08/30 18:34:26 Sentry 错误预警系统的运维 在上一章中,我们介绍了EBLK的日志分析平台. 在日志分析平台上,我们可以 ...

  3. 神州数码DCWS-6028命令总结(二)

    神州数码DCWS-6028命令总结(二) 1.无线配置 Wireless 进入无线全局配置模式 Enable 开启无线特性 No Auto-ip-asssign 关闭自动ip地址分配模式,这里为什么要 ...

  4. Linux下使用命令生成二维码

    首先在保证linux联网的情况下安装 qrencode yum -y install qrencode 使用命令生成二维码(-s 后面的数字是二维码的大小 这里的18 是 18*18) qrencod ...

  5. 【FFmpeg】ffmpeg 命令查询二 ( 比特流过滤器 | 可用协议 | 过滤器 | 像素格式 | 标准声道布局 | 音频采样格式 | 颜色名称 )

    FFmpeg 系列文章目录 [FFmpeg]Windows 搭建 FFmpeg 命令行运行环境 [FFmpeg]FFmpeg 相关术语简介 ( 容器 | 媒体流 | 数据帧 | 数据包 | 编解码器 ...

  6. 华为ensp常用简单命令(二)

    华为ensp常用简单命令(二) 华为ensp 1.CE交换机 2.vlan及三大模式划分端口入vlan 3.网桥优先级 4.RSTP和MSTP 5.查看命令 华为ensp 1.CE交换机 CE交换机把 ...

  7. lisp画靶子 visual_基于VisualLISP的AutoCAD绘图命令的二次开发_沈良翼

    2009 AutoCAD 是由美国 Autodesk 公司于 20 世纪 80 年代初为 微机上应用 CAD 技术而开发的绘图程序软件包, 经过不断的 完善, 现已经成为国际上广为流行的绘图工具 . ...

  8. WPF中的命令与命令绑定(二)

    WPF中的命令与命令绑定(二)                                              周银辉 在WPF中,命令(Commanding)被分割成了四个部分,分别是IC ...

  9. Auto.js 全命令整理(二) 对应用命令专题

    Auto.js 全命令整理(二) 对应用命令专题 目录 Auto.js 全命令整理(二) 对应用命令专题 对应用命令 回顾-应用数据获取 末 对应用命令主要用于确认屏幕显示的是否是正确的页面,so,并 ...

最新文章

  1. 《网络维护》MAC地址
  2. 【LeetCode从零单排】No104 Maximum Depth of Binary Tree
  3. 同步本地远程分支 git remote prune origin
  4. 【AI视野·今日Robot 机器人论文速览 第十四期】Thu, 24 Jun 2021
  5. /usr/include/stdio.h:27:10: fatal error: bits/libc-header-start.h: No such file or directory 报错解决
  6. 如何在linux查找虚拟机主机号_Linux主机名如何重命名?
  7. CentOS 下 Oracle 10g 安装 + 配置 全过程(图解)
  8. 在Java / Maven中处理“Xerces hell”?
  9. LeetCode 145. 二叉树的后序遍历(递归)(迭代)(颜色标记法)
  10. Excel表格快捷键技巧使用
  11. 2023中国西部(西安)第六届城乡环卫新设备新技术与固体废弃物处理技术博览会
  12. 2021新手找货源技巧来啦!萌啦货源手把手教你选品!
  13. 计算机类sci四大水刊,材料灌水的sci期刊_十大水榜sci杂志_四大垃圾sci杂志
  14. Excel VBA 讲座04 - 过程,变量,循环和IF语句
  15. 二零一九,一路走来,不负自己
  16. 设计人工智能产品:技术可能性、用户合意性、商业可行性
  17. 基础爬虫实战案例之获取游戏商品数据
  18. 这样写简历,不是为自己加分就是直接被淘汰!
  19. c语言课后题2.52.8答案,新概念第二册课后题答案详解:Lesson52
  20. 美摄人脸道具制作插件

热门文章

  1. SAP固定资产期初导入检查
  2. SAP生产订单预留相关的备忘录
  3. SMARTFORMS打印后转存为PDF文件相关问题
  4. 大商超的2020:转型、收紧、试新
  5. 私有化预期终于落地,海尔智家将迎来更多可能!
  6. caliop 数据可视化_星载激光雷达CALIOP数据处理算法概述
  7. java 关闭另一个jvm_JVM安全退出(如何优雅的关闭java服务)
  8. mysql mongodb 集群_MySQL与MongoDB
  9. opencv 星空_opencv各种小例子
  10. linux 全新编译安装,全新linux中通过编译方式安装nginx