1. 程式人生 > >Node.js整合Sentry

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');
});