@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');
}
});
مثير للإعجاب. وجدت هذا يبحث عن مشكلة مماثلة. تم إصلاحه إزالة ديدوبي بالنسبة لي.
إغلاق هذا لأنه ليس خطأ.
بالإضافة إلى ذلك ، فإن الإصدار الرئيسي التالي يجعل Dedupe
اختياريًا ، مما يعني أنه لا يوجد خصم افتراضيًا.
التعليق الأكثر فائدة
هناك فرصة لإزالة النسخ.
يمكنك استخدام
debug: true
في مكالمتكinit
لمعرفة ما يحدث.إذا تم حذفه بالفعل ، فيمكنك إزالة هذا التكامل باستخدام:
https://docs.sentry.io/platforms/node/default-integrations/