[
](https://juejin.cn/post/6974424800563298341)
最佳实践
https://juejin.cn/post/6974424800563298341
通过 beforeSnd 插入用户信息
通过 Sentry 机制设置的全局变量在页面刷新后会消失,这边我建议通过 beforeSend 函数,修改 event 中的数据来插入需要的全局变量。
Sentry.init({
...,
// 钩子函数,在每次发送 event 前触发
beforeSend(event) {
// 在这里可根据业务情况发送用户信息
event.user = {
userNick: 'xiaohu'
};
return event;
}
});
设置全局变量
// 以下是 Sentry 定义的全局变量,可以直接使用 Sentry api 设置
Sentry.setUser(object);
Sentry.tags(object);
Sentry.extra(object);
Sentry.level(object);
Sentry.fingerprint(object);
// 通过 setContext,设置 key 值,可自定义随事件传递的变量名
Sentry.setContext(key, context);
捕捉场景
针对前端常见业务场景,总结了以下几个场景需要收集业务报错信息。
- 接口错误
- 网络错误
- js error 报错
- 主要业务流程异常状态
- iframe/webview 内部错误
以上异常如果触发了 js error 或者 Promise.reject 并且没有被抛出,会被 Sentry 自动捕捉到,如果没有自动触发可手动 new Error 或 Promise.reject(error) 抛出异常,即可被 Sentry 收集。或者使用 captureMessage Api 收集运行日志。
采集内容
尽管 Sentry SDK 会捕获所有未处理的异常和事务汇报至系统上,并且会记录产生异常的页面及设备信息。但是有这些信息是远远不够的,还需要额外的业务信息,用于更好的区别定位问题。下面是我对上报异常所需要收集的内容进行总结。
异常信息:抛出异常的 error 信息,Sentry 会自动捕捉。
用户信息:用户的信息(登录名、id、level 等),所属机构信息,所属公司信息。
行为信息:用户的操作过程,例如登陆后进入 xx 页面,点击 xx 按钮,Sentry 会自动捕捉。
版本信息:运行项目的版本信息(测试、生产、灰度),以及版本号。
设备信息:项目使用的平台,web 项目包括运行设备信息及浏览器版本信息。小程序项目包括运行手机的手机型号、系统版本及微信版本。
时间戳:记录异常发生时间,Sentry 会自动捕捉。
异常等级:根据 Sentry 文档分为以下几个等级。
- Critical
- Debug
- Error
- Fatal
- Info
- Log
- Warning
平台信息:记录异常发生的项目。