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 ...
随机推荐
- 当通过Struts2传值给后台时,如果是外键,传字符串那么会出现错误
当通过Struts2传值给后台时,如果是外键,传字符串那么会出现错误 如<input type="text" name="user.department" ...
- cmake之if
note if 要 与endif配对使用 语法含义 表达式 含义 if (not expression) 与 expression相反 if (var1 AND var2) var1与var2都为真时 ...
- Linux下c++之常见错误代码errno(退而结网法)
1.关于 还在到处找 errno对应的含义? 自己动手,很方便可找到其明确的含义 2. 动手 2.1 创建 c++源文件,输入下面的代码: #pragma once #include <iost ...
- 《Java必须知道的300个问题》读书总结
这本书是在图书馆随便逛的时候找到的书.花了一下午看完了,感觉有用的地方不是很多,大部分都是些概念,并没有太大用途.不过里边有些东西还是可以看一看的,总结如下. Java语言基础 1.表达式3-2.6= ...
- Andrey and Problem
B. Andrey and Problem time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- 问题--ImportError: DLL load failed: 找不到指定的模块
今天在运行别人的项目时出现了问题: ImportError: DLL load failed: 找不到指定的模块. 解决方法: 卸载后重新安装. 详情参考: Python报错:ImportError: ...
- isEmpty 和 isBlank
<org.apache.commons.lang3.StringUtils> isEmpty系列 StringUtils.isEmpty() ========> StringUtil ...
- Spring Boot 2 中的默认日志管理与 Logback 配置详解
Spring Boot在所有内部日志中使用Commons Logging,但是对底层日志的实现是开放的.在Spring Boot生态中,为Java Util Logging .Log4J2 和Logb ...
- [opencv]常用阵列操作函数总结
/*=========================================================================*/ // 阵列操作 /*============ ...
- html+css+JavaScript实现爱恩斯坦棋游戏
title: "html+css+JavaScript实现爱恩斯坦棋游戏" author: Sun-Wind date: December 30, 2021 背景:本贴将基于前端的 ...