Node.js整合Sentry
我們所有與JavaScript相關的SDK都提供了相同的API,但這些文件的這一部分解釋了它們之間存在一些差異。
一、整合
我們所有的SDK都提供了可以在某種外掛中看到的整合。所有JavaScript SDK都提供預設的整合,請檢查特定SDK的詳細資訊,以檢視它們提供的整合。
在我們所有的JavaScript SDK中,有一點是相同的,那就是新增或刪除Integrations的方式,例如:for @ sentry / node。
二、新增整合
import * as Sentry from '@sentry/node'; // All integration that come with an SDK can be found on Sentry.Integrations object // Custom integration must conform Integration interface: https://github.com/getsentry/sentry-javascript/blob/master/packages/types/src/index.ts Sentry.init({ dsn: 'https://<key>@sentry.io/<project>', integrations: [new MyAwesomeIntegration()] });
三、刪除整合
在此示例中,我們將刪除預設啟用的整合,以便為事件新增麵包屑:
import * as Sentry from '@sentry/node'; Sentry.init({ dsn: 'https://<key>@sentry.io/<project>', integrations: integrations => { // integrations will be all default integrations return integrations.filter(integration => integration.id !== 'Console'); } });
四、設定整合的替代方法
import * as Sentry from '@sentry/node';
Sentry.init({
dsn: 'https://<key>@sentry.io/<project>',
integrations: integrations => {
// integrations will be all default integrations
return [...integrations, new MyCustomIntegration()];
}
});
五、提示
Event和Breadcrumb提示是包含用於組合事件或麵包屑的各種資訊的物件。對於事件,這些事件包括event_id,originalException,syntheticException(在內部用於生成更清晰的堆疊跟蹤)以及使用者附加的任何其他任意資料。對於麵包屑,它依賴於所有實現。對於XHR請求,提示包含xhr物件本身,對於使用者互動,它包含DOM元素和事件名稱等。它們在兩個地方可用。 beforeSend / beforeBreadcrumb和eventProcessors。這是我們允許使用者修改我們放在一起的兩種方式。當前存在事件的常見提示:
originalException
導致建立事件的原始異常。這對於更改事件的分組方式或提取其他資訊非常有用。
syntheticException
當引發字串或非錯誤物件時,Sentry會建立一個合成異常,以便您可以獲得基本的堆疊跟蹤。此異常儲存在此處以進行進一步的資料提取。這些存在於麵包屑中:
level / input
對於從控制檯日誌攔截建立的麵包屑,它將原始控制檯日誌級別和原始輸入資料儲存到日誌功能。
request
/ response
/ event
對於從HTTP請求建立的麵包屑,它儲存請求和響應物件(來自節點HTTP API)以及節點事件(響應或錯誤)。
六、EventProcessors
使用eventProcessors,您可以使用其他資料進入豐富事件的過程。您可以在當前範圍上新增自己的eventProcessor。與beforeSend的區別在於eventProcessors在範圍級別上執行,其中beforeSend全域性執行,而不管您在哪個範圍內執行。 eventProcessors還可以選擇接收提示,參見:Hints。
// This will be set globally for every succeeding event send
Sentry.configureScope(scope => {
scope.addEventProcessor(async (event, hint) => {
// Add anything to the event here
// returning null will drop the event
return event;
});
});
// Using withScope, will only call the event processor for all "sends"
// that happen within withScope
Sentry.withScope(scope => {
scope.addEventProcessor(async (event, hint) => {
// Add anything to the event here
// returning null will drop the event
return event;
});
Sentry.captureMessage('Test');
});