Sentry 开发者贡献指南 - 什么是 Scope, 什么是 Hub?

当一个事件被捕获并发送到 Sentry 时,SDK 会将该事件数据与来自当前 scope 的额外信息合并。SDK 通常会在框架集成中为您自动管理 scope,您无需考虑它们。但是,您应该知道 scope 是什么以及如何利用它来获取优势。
什么是 Scope, 什么是 Hub?
您可以将 hub 视为我们的 SDK 用于将事件路由到 Sentry 的中心点。当您调用 init() 时,会创建一个 hub,并在其上创建一个 client 和一个空白 scope。然后该 hub 与当前线程相关联,并将在内部保存 scope 堆栈。
scope 将保存应与事件一起发送的有用信息。例如context(上下文)或breadcrumbs(面包屑)存储在 scope 内。当一个 scope 被 push 时,它从父 scope 继承所有数据,当它 pop 时,所有修改都被还原。
- https://docs.sentry.io/platforms/javascript/enriching-events/context/
- https://docs.sentry.io/platforms/javascript/enriching-events/breadcrumbs/
默认的 SDK 集成将智能地 push 和 pop scope。例如,Web 框架集成将围绕您的路由或控制器创建和销毁 scope。
Scope 和 Hub 的工作原理
当您开始使用 SDK 时,会自动为您创建一个开箱即用的 scope 和 hub。除非您正在编写integration(集成)或想要创建或销毁 scope,否则您不太可能直接与 hub 交互。另一方面,scope 更面向用户。您可以随时调用 configure-scope 来修改存储在 scope 上的数据。例如,这用于修改上下文。
配置 Scope
使用 scope 时最有用的操作是 configure-scope 函数。它可用于重新配置当前 scope。
您首先需要像往常一样导入 SDK:
import * as Sentry from "@sentry/browser";
例如,您可以添加自定义 tag 或通知 Sentry 当前已通过身份验证的用户。
Sentry.configureScope(function(scope) {
scope.setTag("my-tag", "my value");
scope.setUser({
id: 42,
email: "john.doe@example.com",
});
});
在注销用户时取消设置,也可以应用此配置:
Sentry.configureScope(scope => scope.setUser(null));
要了解哪些有用信息可以与 scope 关联,请参阅上下文文档。
局部 Scope
我们还支持一次性推送和配置 scope。这通常称为 with-scope 或 push-scope,如果您只想发送具有一个特定事件的数据,这也非常有用。 在以下示例中,我们使用该函数将 level 和 tag 附加到仅一个特定错误:
Sentry.withScope(function(scope) {
scope.setTag("my-tag", "my value");
scope.setLevel("warning");
// will be tagged with my-tag="my value"
Sentry.captureException(new Error("my error"));
});
// will not be tagged with my-tag
Sentry.captureException(new Error("my other error"));
虽然这个例子看起来与 configure-scope 很相似,但它有很大的不同,因为 configure-scope 实际上改变了当前的活动 scope,所有对 configure-scope 的后续调用都会保留这些变化。
另一方面,使用 with-scope 会创建当前 scope 的克隆,并将保持隔离,直到函数调用完成。 因此,您可以在其中设置您不想在其他地方的上下文信息,或者通过在 scope 上调用 clear 来完全不附加任何上下文信息,而“global(全局)” scope 保持不变。
请记住,with-scope 不会捕获在其回调函数中发生的任何异常,并且在那里发生的每个错误都将被静默忽略而不报告。
更多
Sentry 开发者贡献指南 - 什么是 Scope, 什么是 Hub?的更多相关文章
- Sentry 开发者贡献指南 - SDK 开发(性能监控)
内容整理于官方开发文档 系列 Docker Compose 部署与故障排除详解 K8S + Helm 一键微服务部署 Sentry 开发者贡献指南 - 前端(ReactJS生态) Sentry 开发者 ...
- Sentry 开发者贡献指南 - SDK 开发(性能监控:Sentry SDK API 演进)
内容整理自官方开发文档 本文档的目标是将 Sentry SDK 中性能监控功能的演变置于上下文中. 我们首先总结了如何将性能监控添加到 Sentry 和 SDK, 然后我们讨论 identified ...
- Sentry 开发者贡献指南 - Feature Flag
功能 flag 在 Sentry 的代码库中声明. 对于自托管用户,这些标志然后通过 sentry.conf.py 进行配置. 对于 Sentry 的 SaaS 部署,Flagr 用于在生产中配置标志 ...
- Sentry 开发者贡献指南 - 后端服务(Python/Go/Rust/NodeJS)
内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...
- Sentry 开发者贡献指南 - 前端 React Hooks 与虫洞状态管理模式
系列 Sentry 开发者贡献指南 - 前端(ReactJS生态) Sentry 开发者贡献指南 - 后端服务(Python/Go/Rust/NodeJS) 什么是虫洞状态管理模式? 您可以逃脱的最小 ...
- Sentry 开发者贡献指南 - SDK 开发(事件负载)
内容整理自官方开发文档 系列 Docker Compose 部署与故障排除详解 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentr ...
- Sentry 开发者贡献指南 - Django Rest Framework(Serializers)
Serializer 用于获取复杂的 python 模型并将它们转换为 json.序列化程序还可用于在验证传入数据后将 json 反序列化回 Python 模型. 在 Sentry,我们有两种不同类型 ...
- Sentry 开发者贡献指南 - 配置 PyCharm
概述 如果您使用 PyCharm 进行开发,则需要配置一些内容才能运行和调试. 本文档描述了一些对 sentry 开发有用的配置 配置 Python 解释器:(确保它是 venv 解释器)例如 ~/v ...
- Sentry 开发者贡献指南 - 数据库迁移
Django 迁移是我们处理 Sentry 中数据库更改的方式. Django 迁移官方文档:https://docs.djangoproject.com/en/2.2/topics/migratio ...
随机推荐
- JAVA删除某个文件夹(递归删除文件夹的所有文件)
/** * 递归删除文件夹下所有内容 最后删除该文件夹 * @param filePath 要删除的文件夹路径 * @return */ public boolean deleteFiles(Stri ...
- JAVA中JDK1.8的LocalDateTime日期类的操作方法
LocalDateTime与Date相互转换参考:https://www.cnblogs.com/pxblog/p/13745972.html 关键类 Instant:瞬时时间. LocalDate: ...
- 【LeetCode】887. Super Egg Drop 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 参考资料 日期 题目地址:https://leetc ...
- 【LeetCode】847. Shortest Path Visiting All Nodes 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/shortest ...
- 【LeetCode】729. My Calendar I 解题报告
[LeetCode]729. My Calendar I 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/my-calendar- ...
- Lotus and Horticulture
Lotus and Horticulture Accepts: 91 Submissions: 641 Time Limit: 4000/2000 MS (Java/Others) Memory Li ...
- 教学日志:javaSE-数组
一.一维数组 import java.util.Scanner; /* 数组:存储一组相同数据类型的有序集合. 特点: 1.数组中的元素必须是同一种数据类型,可以是基本数据类型,也可以是引用数据类型 ...
- The Limitations of Deep Learning in Adversarial Settings
目录 概 主要内容 alg2, alg3 一些有趣的实验指标 Hardness measure Adversarial distance Nicolas Papernot, Patrick McDan ...
- Capstone CS5268 Type-C转HDMI+VGA带PD快充+USB3.1扩展坞方案
CS5268是一种高度集成的单芯片,适用于多个细分市场和显示应用,如拓展坞.扩展底座等. 2.CS5268参数说明 总则 USB Type-C规范1.2 HDMI规范v2.0b兼容发射机,数据速率高达 ...
- Java实习生常规技术面试题每日十题Java基础(二)
目录 1. JAVA 的反射机制的原理. 2.静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同? 3.如何将String类型转化成Number类型. 4.什 ...