Sentry-javascript: يرسل Sentry.captureException الحدث إلى Sentry مرة واحدة فقط (AWS Lambda)

تم إنشاؤها على ٢٦ فبراير ٢٠١٩  ·  3تعليقات  ·  مصدر: getsentry/sentry-javascript

الحزمة + الإصدار

@sentry/node

إصدار:

4.6.3

وصف

أحاول دمج SDK الحارس الجديد في بنية بدون خادم لدينا ، لدينا تجربة عامة حول كل معالج ، والتي تستدعي CaptureException. باختصار ، هذا هو شكل الكود الخاص بنا (لقد تركت منطق أعمالنا والكثير من طرق المنفعة).

Sentry.init({
  dsn: process.env.sentryUrl,
  environment: process.env.NODE_ENV,
  // debugging issue where we only get an event once
  beforeSend: (event, _) => { console.log(event.exception); return event }
});

async function wrapper(...) {
   try {
     handler(...)
   } catch(error) {
      Sentry.configureScope(scope => {
        scope.setTag("test", "Hello, world")
      })

      const eventId = Sentry.captureException(error)
      // debugging, log event id to see if captureException works
      console.log(eventId)

      const flushResult = await Sentry.flush(1000)
      console.log(flushResult) // see if flush succeeded
   }
}

لقد جعلت المعالج يرمي خطأ دائمًا. عندما أقوم بالطلب الأول ، ينتهي كل شيء في Sentry على ما يرام. في الطلب الثاني ، لم يحدث شيء. عندما أنظر إلى CloudWatch ، هذا ما أجده. لقد أضفت تعليقات للراحة.

الطلب الأول:

/// the eventId from captureException
2019-02-26T13:47:22.584Z: 8cf83e38081a4672841a6f795ce8105a 
/// the middleware defined in Sentry.init
2019-02-26T13:47:23.153Z: { values: [ { stacktrace: [Object], type: 'Error', value: 'This is an error' } ] } 
/// result of Sentry.flush
2019-02-26T13:47:23.294Z: true 

الطلب الثاني:

/// the eventId from captureException
2019-02-26T13:47:24.761Z fbc2c8b2a4d5447380a0f92dd87896f6
/// result of Sentry.flush
2019-02-26T13:47:24.963Z: true 

كما ترى ، فإنه لا يصل أبدًا إلى البرنامج الوسيط beforeSend في الطلب الثاني ، لذلك أعتقد أنه لم يتم إرساله مطلقًا إلى Sentry على الإطلاق.

يجب أن أشير إلى أنه عندما أقوم بعمل Sentry.getCurrentHub().getClient().captureException(error) ، فإنه يرسل الاستثناء إلى Sentry في كل مرة ، ولكن النطاق الذي تم تكوينه في Sentry.configureScope لا يتم تطبيقه مطلقًا على الحدث.

لقد حاولت إعادة إنتاج هذا محليًا ، لكن هذا يحدث فقط عند النشر على AWS Lambda.

التعليق الأكثر فائدة

هناك فرصة لإزالة النسخ.
يمكنك استخدام debug: true في مكالمتك init لمعرفة ما يحدث.

إذا تم حذفه بالفعل ، فيمكنك إزالة هذا التكامل باستخدام:

Sentry.init({
  integrations: integrations => {
    return integrations.filter(integration => integration.name !== 'Dedupe');
  }
});

https://docs.sentry.io/platforms/node/default-integrations/

ال 3 كومينتر

هناك فرصة لإزالة النسخ.
يمكنك استخدام debug: true في مكالمتك init لمعرفة ما يحدث.

إذا تم حذفه بالفعل ، فيمكنك إزالة هذا التكامل باستخدام:

Sentry.init({
  integrations: integrations => {
    return integrations.filter(integration => integration.name !== 'Dedupe');
  }
});

https://docs.sentry.io/platforms/node/default-integrations/

مثير للإعجاب. وجدت هذا يبحث عن مشكلة مماثلة. تم إصلاحه إزالة ديدوبي بالنسبة لي.

إغلاق هذا لأنه ليس خطأ.
بالإضافة إلى ذلك ، فإن الإصدار الرئيسي التالي يجعل Dedupe اختياريًا ، مما يعني أنه لا يوجد خصم افتراضيًا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات