新聞中心
什么是 Scope, 什么是 Hub?
您可以將 hub 視為我們的 SDK 用于將事件路由到 Sentry 的中心點(diǎn)。當(dāng)您調(diào)用 init() 時(shí),會(huì)創(chuàng)建一個(gè) hub,并在其上創(chuàng)建一個(gè) client 和一個(gè)空白 scope。然后該 hub 與當(dāng)前線程相關(guān)聯(lián),并將在內(nèi)部保存 scope 堆棧。

創(chuàng)新互聯(lián)建站長期為上1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為閩清企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè),閩清網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
scope 將保存應(yīng)與事件一起發(fā)送的有用信息。例如context(上下文)或breadcrumbs(面包屑)存儲(chǔ)在 scope 內(nèi)。當(dāng)一個(gè) scope 被 push 時(shí),它從父 scope 繼承所有數(shù)據(jù),當(dāng)它 pop 時(shí),所有修改都被還原。
https://docs.sentry.io/platforms/javascript/enriching-events/context/
https://docs.sentry.io/platforms/javascript/enriching-events/breadcrumbs/
默認(rèn)的 SDK 集成將智能地 push 和 pop scope。例如,Web 框架集成將圍繞您的路由或控制器創(chuàng)建和銷毀 scope。
Scope 和 Hub 的工作原理
當(dāng)您開始使用 SDK 時(shí),會(huì)自動(dòng)為您創(chuàng)建一個(gè)開箱即用的 scope 和 hub。除非您正在編寫integration(集成)或想要?jiǎng)?chuàng)建或銷毀 scope,否則您不太可能直接與 hub 交互。另一方面,scope 更面向用戶。您可以隨時(shí)調(diào)用 configure-scope 來修改存儲(chǔ)在 scope 上的數(shù)據(jù)。例如,這用于修改上下文。
https://docs.sentry.io/platforms/javascript/enriching-events/context/
配置 Scope
使用 scope 時(shí)最有用的操作是 configure-scope 函數(shù)。它可用于重新配置當(dāng)前 scope。
您首先需要像往常一樣導(dǎo)入 SDK:
import * as Sentry from "@sentry/browser";
例如,您可以添加自定義 tag 或通知 Sentry 當(dāng)前已通過身份驗(yàn)證的用戶。
Sentry.configureScope(function(scope) {
scope.setTag("my-tag", "my value");
scope.setUser({
id: 42,
email: "[email protected]",
});
});在注銷用戶時(shí)取消設(shè)置,也可以應(yīng)用此配置:
Sentry.configureScope(scope => scope.setUser(null));
要了解哪些有用信息可以與 scope 關(guān)聯(lián),請(qǐng)參閱上下文文檔。
https://docs.sentry.io/platforms/javascript/enriching-events/context/
局部 Scope
我們還支持一次性推送和配置 scope。這通常稱為 with-scope 或 push-scope,如果您只想發(fā)送具有一個(gè)特定事件的數(shù)據(jù),這也非常有用。在以下示例中,我們使用該函數(shù)將 level 和 tag 附加到僅一個(gè)特定錯(cuò)誤:
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"));雖然這個(gè)例子看起來與 configure-scope 很相似,但它有很大的不同,因?yàn)?configure-scope 實(shí)際上改變了當(dāng)前的活動(dòng) scope,所有對(duì) configure-scope 的后續(xù)調(diào)用都會(huì)保留這些變化。
另一方面,使用 with-scope 會(huì)創(chuàng)建當(dāng)前 scope 的克隆,并將保持隔離,直到函數(shù)調(diào)用完成。因此,您可以在其中設(shè)置您不想在其他地方的上下文信息,或者通過在 scope 上調(diào)用 clear 來完全不附加任何上下文信息,而“global(全局)” scope 保持不變。
請(qǐng)記住,with-scope 不會(huì)捕獲在其回調(diào)函數(shù)中發(fā)生的任何異常,并且在那里發(fā)生的每個(gè)錯(cuò)誤都將被靜默忽略而不報(bào)告。
名稱欄目:Sentry開發(fā)者貢獻(xiàn)指南-什么是Scope,什么是Hub?
文章來源:http://fisionsoft.com.cn/article/cdcgjdo.html


咨詢
建站咨詢
