Sentry-javascript: تعطيل الحارس في بيئة التطوير عند استخدام المكوّن الإضافي الزاوي

تم إنشاؤها على ١٧ ديسمبر ٢٠١٥  ·  15تعليقات  ·  مصدر: getsentry/sentry-javascript

في الوقت الحالي ، لا يمكن تعطيل المكون الإضافي الحارس بسبب فشل تحميل الوحدة النمطية ngRaven.

في بيئة التطوير ، أستخدم ما يلي دون تقديم DSN
Raven.config (). install ()

لا يتم استدعاء رد الاتصال الذي يسجل موفر الغراب

Raven.addPlugin(function () {
    angular.module('ngRaven', [])
        .provider('Raven',  RavenProvider)
        .config(['$provide', ExceptionHandlerProvider]);
});

لأن وظيفة التثبيت لا تستدعي البرنامج المساعد الذي يثبت الوحدة
فشل isSetup () لأن globalServer فارغ

install: function() {
    if (isSetup() && !isRavenInstalled) {
        TraceKit.report.subscribe(handleStackInfo);

        // Install all of the plugins
        each(plugins, function(_, plugin) {
            plugin();
        });

        isRavenInstalled = true;
    }

    return Raven;
},

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

تلقيت طلبًا مشابهًا من benvinegar وأشار إلى أنه يمكنك استخدام:

Raven.config('your dsn', {
  shouldSendCallback: function () {
    return false;
  }
}).install();

وهذا سوف يمنع ريفين من الإبلاغ. بدّل حالة return إلى TRUE وسيبدأ الإبلاغ. على الأقل هذا ما قيل لي. نخطط لاستخدام هذا بالإضافة إلى أمر نشر sed لقلب القيمة المنطقية في وقت النشر.

ال 15 كومينتر

ذات صلة بـ # 414 و # 413

Sijaodedfos - يمكنك التعليق على رقم 414؟ مثل ، هل ستعالج العلاقات العامة هذه المشكلة؟

يبدو benvinegar شرعيًا بالنسبة لي ، على الرغم من أنني يمكن أن أتخيل الحالة التي تريد أن يكون فيها مزود Raven متاحًا ، حتى بدون استدعاء .config() - مثل إعداد Raven.debug flag على سبيل المثال

تلقيت طلبًا مشابهًا من benvinegar وأشار إلى أنه يمكنك استخدام:

Raven.config('your dsn', {
  shouldSendCallback: function () {
    return false;
  }
}).install();

وهذا سوف يمنع ريفين من الإبلاغ. بدّل حالة return إلى TRUE وسيبدأ الإبلاغ. على الأقل هذا ما قيل لي. نخطط لاستخدام هذا بالإضافة إلى أمر نشر sed لقلب القيمة المنطقية في وقت النشر.

لقد فعلت شيئًا مشابهًا لما سبق للسماح بتثبيت () بنجاح ، ولتجنب إجراء أي طلبات http لإرسال الأخطاء فعليًا ( window.SERVER_FLAGS هو كيف أمرر sentryURL الخاص بي من الواجهة الخلفية إلى الواجهة الأمامية).

if (!window.SERVER_FLAGS.sentryURL) {
  // Never bother sending data to sentry
  Raven.setShouldSendCallback(function() { return false });
  // Allow Raven.install() to succeed
  Raven.isSetup = function() {
    return true;
  }
}
Raven
.config(window.SERVER_FLAGS.sentryURL, {
  release: window.SERVER_FLAGS.version,
  debug: true,
})
.addPlugin(Raven.Plugins.Angular)
.install();

يبدو أن هذا يعمل بشكل جيد إلى حد ما ، ولا يزال يسمح لـ Raven بالركض ، لكنه ببساطة لا يقدم تقريرًا. أنا حقًا لا أحب الاضطرار إلى اختراق isSetup لكن هذه الطريقة الوحيدة التي يمكنني أن أجد بها كانت طفيفة التوغل للحصول على ngRaven تحميل.

للآخرين الذين يتعثرون في هذا

إذا كنت تستخدم webpack لبناء التطبيق الخاص بك ، فإنك تستخدم متغيرات البيئة لتكوين raven باستخدام المكون الإضافي للبيئة

https://webpack.js.org/plugins/environment-plugin/

على سبيل المثال

if (process.env.NODE_ENV === 'dev') {
  Raven.setShouldSendCallback(() => { return false; });
  Raven.isSetup = () => { return true; };
}

Raven
  .config(process.env.RAVEN_DSN, {
    debug: process.env.RAVEN_DEBUG,
  })
  .addPlugin(require('raven-js/plugins/angular'), angular)
  .install();

isSetup هو الآن للقراءة فقط ، لذلك لم تعد الطريقة المذكورة أعلاه تعمل.

لقد وجدت الحل التالي ، والذي يبدو أنه يعمل ، على الرغم من عدم علمي بالسبب.

let isProduction = process.env.ENV === 'build'; // variable provided by webpack

Raven
.config('https://<key>@sentry.io/<project>', {
  shouldSendCallback: function () {
    return isProduction;
  }
})
.install();

if (!isProduction) {
  Raven.uninstall(); // this is necessary! for some reason
}

export class RavenErrorHandler implements ErrorHandler {
  handleError(err: any): void {
    console.error(err); // this still fires after uninstalling!!! it's because it's already listed as Angular provider 
    Raven.captureException(err)
  }
}

لا يزال حلاً سيئًا لأنه يختطف جميع أخطائي ، لذا لا أعرف من أي سطر تم إلقاؤها. على الأقل أعتقد أنه ليس فظيعًا مثل عدم رؤيتهم على الإطلاق.

لقد استخدمت بهذه الطريقة. يبدو أنه يعمل بالنسبة لي

إذا (إنتاج البيئة) {
Raven.config ('https: //@ sentry.io /")
.تثبيت()؛
}

وفي المزودين
الموفرون: [البيئة. الإنتاج؟ {توفير: ErrorHandler، useClass: RavenErrorHandler}: []، ... `

يرجى إعلامي إذا كنت أفعل أي شيء خطأ هنا.

تبدو جيدة بالنسبة لي. على ما يبدو ، تم الرد على المشكلة الأصلية هنا بالفعل ، لذا أغلق هذه المشكلة. لا تتردد في إعادة فتحه إذا كان لا يزال ذا صلة بأي شكل من الأشكال.

أكثر سهولة على "app.module.ts"

import {environment} from '../environments/environment';
...
    providers: [
    LocalStorageService,
    EventLocalStorageService,
    EventService,
    ActionButtonService,
    WeatherUndergroundWeatherService,
    GeoLocationInfoService,
    AppEventColorService,
    // {provide: ErrorHandler, useClass: RavenErrorHandler}
    {provide: ErrorHandler, useClass: environment.production ? RavenErrorHandler : ErrorHandler} // See here
  ],

و

  .config('key', {
    shouldSendCallback: function () {
      return environment.production;
    }
  })
  .install();

بهذه الطريقة يكون لديك رسائل localdev في وحدة التحكم الخاصة بك (وإلا فإن Sentry يأخذ بعضها) وفي الإنتاج تحصل على الرسائل التي تريدها

على الأقل في Chrome (لست متأكدًا من المتصفحات الأخرى) ، هناك طريقة أخرى لمنع Raven من "اختطاف" وحدة تحكم المطورين وهي Blackbox raven.js :

https://gist.github.com/paulirish/c307a5a585ddbcc17242
https://developer.chrome.com/devtools/docs/blackboxing

2018-05-11_12-45-12

وماذا عن الحارس؟ لا أستخدم Raven ، لدي Sentry وأريد تعطيله في بيئة التطوير على مضيفي المحلي.

https://dev.to/angular/tracking-errors-in-angular-with-sentry-4oo0 - ها هو

artuska ، يمكنك إما تقديم DSN فارغًا أو استخدام beforeSend لإيقاف النقل.

Sentry.init({
  dsn: process.env.development ? '' : 'your-real-dsn'
})

أو

Sentry.init({
  dsn: 'your-real-dsn',
  beforeSend(event) {
    if (process.env.development) return null;
    return event;
  }
})

لا أعتقد أن هذا في الواقع يعطل الحارس. يتوقف فقط إذا كان من الإرسال
البيانات. لا يزال فتات الخبز يلف معظم القضايا السيئة

يوم الإثنين 9 ديسمبر 2019 الساعة 10:15 صباحًا Kamil Ogórek [email protected]
كتب:

artuska https://github.com/artuska يمكنك إما تقديم DSN فارغة أو
استخدم قبل الإرسال لوقف النقل.

Sentry.init ({
dsn: process.env.development؟ ":" your-real-dsn "
})

أو

Sentry.init ({
dsn: "your-real-dsn" ،
beforeSend (الحدث) {
إذا كانت (process.env.development) ترجع خالية ؛
حدث العودة
}
})

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/getsentry/sentry-javascript/issues/436؟email_source=notifications&email_token=AAJVX45ZEIJWZSXZSBQ5ZQLQXYECDA5CNFSM4BW42VRKYY3PNVWWK3TUL52HS4DFVREXG43
أو إلغاء الاشتراك
https://github.com/notifications/unsubscribe-auth/AAJVX4YBWA3R6SM63NV5JPDQXYECDANCNFSM4BW42VRA
.

jimmykane صحيح ، إذا كنت تريد تعطيل Sentry ، فقط اتصل بـ init بشروط

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