当前位置: 首页 > 科技观察

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

时间:2023-03-21 19:12:54 科技观察

当一个事件被捕获并发送到Sentry时,SDK将该事件数据与来自当前范围的附加信息合并。SDK通常会在框架集成中自动为您管理范围,您无需考虑它们。但是,您应该知道范围是什么以及如何利用它来发挥您的优势。什么是作用域,什么是集线器?您可以将集线器视为我们的SDK用于将事件路由到Sentry的中心点。当您调用init()时,会创建一个集线器,其中包含一个客户端和一个空范围。然后集线器与当前线程相关联,并将在内部保存作用域堆栈。范围将保存应与事件一起发送的有用信息。例如上下文(context)或面包屑(breadcrumbs)都存储在scope中。当一个作用域被压入时,它会继承父作用域的所有数据,而当它被弹出时,所有的修改都会被恢复。https://docs.sentry.io/platforms/javascript/enriching-events/context/https://docs.sentry.io/platforms/javascript/enriching-events/breadcrumbs/默认的SDK集成将推送和弹出智能范围.例如,Web框架集成将在您的路由或控制器周围创建和销毁范围。作用域和集线器如何工作当您开始使用SDK时,会自动为您创建开箱即用的作用域和集线器。除非您正在编写集成或想要创建或销毁作用域,否则您不太可能直接与中心交互。另一方面,范围更面向用户。您可以随时调用configure-scope来修改存储在范围上的数据。例如,这用于修改上下文。https://docs.sentry.io/platforms/javascript/enriching-events/context/配置范围使用范围时最有用的操作是配置范围功能。它可用于重新配置当前范围。您首先需要像往常一样导入SDK:import*asSentryfrom"@sentry/browser";例如,您可以添加自定义标签或通知Sentry当前已通过身份验证的用户。Sentry.configureScope(function(scope){scope.setTag("my-tag","myvalue");scope.setUser({id:42,email:"john.doe@example.com",});});用户注销时未设置,也可以应用此配置:Sentry.configureScope(scope=>scope.setUser(null));要了解哪些有用信息可以与范围相关联,请参阅上下文文档。https://docs.sentry.io/platforms/javascript/enriching-events/context/部分范围我们也支持一次性推送和配置范围。这通常称为with-scope或push-scope,如果您只想通过一个特定事件发送数据,这也很有用。在以下示例中,我们使用此函数将级别和标签附加到仅一个特定错误:Sentry.withScope(function(scope){scope.setTag("my-tag","myvalue");scope.setLevel("warning");//将被标记为my-tag="myvalue"Sentry.captureException(newError("myerror"));});//将不会被标记为my-tagSentry.captureException(newError)(“我的另一个错误”));虽然这个例子看起来和configure-scope很像,但其实是有很大区别的,因为configure-scope实际上改变了当前活动的范围,并且所有后续调用configure-scope都会保留这些改变。另一方面,使用with-scope会创建当前作用域的克隆,并将保持隔离状态直到函数调用完成。因此,您可以在其中设置不需要其他地方的上下文信息,或者通过在作用域上调用clear来附加任何内容,而“全局”作用域保持不变。请记住,with-scope不会捕获其回调函数中发生的任何异常,并且那里发生的每个错误都将被默默地忽略而不报告。