Sentry-javascript: Отключить часовую в среде разработки при использовании плагина angular

Созданный на 17 дек. 2015  ·  15Комментарии  ·  Источник: getsentry/sentry-javascript

На данный момент невозможно отключить плагин sentry, потому что модуль ngRaven не загружается.

В среде разработки я использую следующее без предоставления DSN
Raven.config (). Install ()

Обратный вызов, который регистрирует поставщика raven, не вызывается

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

Поскольку функция установки не вызывает плагин, устанавливающий модуль
isSetup () не удалось, потому что globalServer имеет значение null

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 на ИСТИНА, и он начнет отчет. По крайней мере, так мне сказали. Мы планируем использовать это плюс команду развертывания sed чтобы перевернуть логическое значение во время развертывания.

Все 15 Комментарий

Относятся к № 414 и № 413

@Sija @odedfos - вы можете прокомментировать # 414? Мол, этот PR решит эту проблему?

@benvinegar кажется мне законным, хотя я мог представить себе случай, когда вы хотите, чтобы был доступен Raven provider, даже без вызова .config() - например, установка флага Raven.debug

У меня был аналогичный запрос от @benvinegar, и он указал, что вы можете использовать:

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

И это остановит Рейвен от репортажей. Измените статус return на ИСТИНА, и он начнет отчет. По крайней мере, так мне сказали. Мы планируем использовать это плюс команду развертывания sed чтобы перевернуть логическое значение во время развертывания.

Я сделал что-то похожее на приведенное выше, чтобы разрешить install () успешно и избежать выполнения каких-либо 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)
  }
}

Это все еще ужасное решение, потому что оно перехватывает все мои ошибки, поэтому я не знаю, из какой строки они были выброшены. По крайней мере, я думаю, это не так страшно, как их вообще не видеть.

Я использовал этот способ. Кажется, у меня работает

`if (environment.production) {
Raven.config ('https: //@ sentry.io /')
.установить();
}

и в провайдерах
поставщики: [environment.production? {предоставить: 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 консоли разработчика - это черный ящик raven.js :

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

2018-05-11_12-45-12

А что насчет Sentry? Я не использую 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;
  }
})

Я не думаю, что это действительно отключает Sentry. Он просто останавливается, если от отправки
данные. Тем не менее, панировочные сухари покрывают большинство проблем, что отстой

В понедельник, 9 декабря 2019 г., в 10:15 Камил Огорек [email protected]
написал:

@artuska https://github.com/artuska вы можете указать пустой DSN или
используйте beforeSend, чтобы остановить транспортировку.

Sentry.init ({
dsn: process.env.development? '': 'твой-настоящий-dsn'
})

или

Sentry.init ({
dsn: 'твой-реальный-dsn',
beforeSend (событие) {
если (process.env.development) вернет ноль;
событие возврата;
}
})

-
Вы получили это, потому что прокомментировали.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/getsentry/sentry-javascript/issues/436?email_source=notifications&email_token=AAJVX45ZEIJWZSXZSBQ5ZQLQXYECDA5CNFSM4BW42VRKYY3PNVWWK3TREEG63BW42VRKYY3PNVWWK3TULXW2GWWW2NVWWWK3TREXMXWW2GWWW2NVWWWK3TREGWWW2
или отказаться от подписки
https://github.com/notifications/unsubscribe-auth/AAJVX4YBWA3R6SM63NV5JPDQXYECDANCNFSM4BW42VRA
.

@jimmykane правильно, если вы хотите отключить Sentry, просто вызовите init условно

Была ли эта страница полезной?
0 / 5 - 0 рейтинги