Sentry-javascript: Отключить для разработки

Созданный на 3 мая 2013  ·  19Комментарии  ·  Источник: getsentry/sentry-javascript

У меня возникли проблемы с выяснением того, как восстановить событие window.onerror после включения Raven в качестве зависимости от AMD.

Я вообще не хочу использовать Raven во время разработки, поэтому я вызываю config() / install() только в рабочем режиме. Но в режиме разработки все ошибки по-прежнему выдаются TraceKit.report() ... Что довольно неприятно, поскольку номер файла/строки/трассировка стека больше не помогает в инструментах разработки браузера.

Я пытался вызвать uninstall() в режиме разработки, но это не помогло. Есть ли причина, по которой вы привязываетесь к window.onerror независимо от того, что вместо того, чтобы делать это внутри config() или install() ?

Самый полезный комментарий

Для тех, кто приходит сюда, пытаясь понять это, это была опция конфигурации, которую я сначала пропустил shouldSendCallback :

import Raven from 'raven-js';

const env = 'prod';
const release = '12345';

Raven
  .config('https://<example>@sentry.io/1234', {
    environment: env,
    release: release,
    shouldSendCallback: () => {
      // Do your logic here...
      return ['prod', 'staging'].indexOf(env) !== -1;
    },
  })
  .install();

Если shouldSendCallback равно false , Sentry не сообщит об этом. С этим 👍 нет необходимости в логике условной отчетности в вашем коде.

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

Решение найдено, но оно не идеально...

Я пытался вручную установить window.onerror = null в режиме разработки, но даже это не сработало. Проблема была в том, что я require() использовал Raven в паре модулей, и каждый раз Raven перепривязывался к window.onerror .

Поэтому вместо этого я перестал использовать noConflict() , включил его как глобальную зависимость в конфигурацию requirejs и удалил как локальную зависимость из других модулей. Это позволило установить window.onerror = null без повторной привязки Raven к событию позже.

Довольно грязное исправление, хотя :(

@adambiggs Другое решение — создать модуль-оболочку AMD для Raven-js, который выполняет вызов configure & install, что означает, что вы импортируете raven-js только один раз, но можете импортировать свой собственный модуль несколько раз, если честно.

Я думаю, что это может быть связано с: https://github.com/getsentry/raven-js/pull/109 и https://github.com/getsentry/raven-js/issues/91#issuecomment -15560074.

Это уже не должно быть актуально. window.onerror не изменяется до вызова install() и восстанавливается при вызове uninstall() . Дайте мне знать, если возникнет другая проблема.

@mattrobenolt , я обновился до 1.1.11, и я не звоню install() , и у меня все еще возникают ошибки обработки ворона.

@bobbyrenwick Можете ли вы связать меня с чем-то общедоступным, что показывает, что это происходит?

Есть ли обходной путь для этого? Даже когда я никогда не вызываю Raven.config() или Raven.install() или если я вызываю Raven.config(false) , кажется, что обработчики jquery или onerror все еще установлены. Единственный обходной путь, кажется, никогда не загружает raven js в первую очередь (что далеко не идеально).

См.: #282 :)

Вы предоставляете # 282 просто как фон? Я не вижу там никаких обходных путей.

Да потому что решения пока нет.

Мое единственное решение — использовать require() в блоке if (остальная часть моего кода теперь использует import :(

Есть ли обновление по этому поводу?

Любое обновление? ВСЕ ЕЩЕ работает неправильно.

РЕДАКТИРОВАТЬ: Извините за мой тон. Был длинный день.

Что ты пытаешься сделать? Я делаю это, что работает просто отлично:

if (process.env.RAVEN_DSN) {
  require('raven-js').config(process.env.RAVEN_DSN, {
    environment: process.env.NODE_ENV,
  }).install();
}

Где process.env.RAVEN_DSN — это, конечно, DSN, который устанавливается только при сборке для сред, в которых я хочу запускать Raven, через webpack.EnvironmentPlugin .

В вашей версии невозможно условно настроить Angular ErrorHandler. Либо вы настраиваете его на всякий случай, и тогда он проглатывает ваши ошибки, несмотря ни на что, либо не указываете его в провайдерах, что od dev приводит к сбою всего модуля.

Насколько я знаю, невозможно использовать или не использовать поставщика Angular на основе условия.

Я сделал много итераций попыток исправления сегодня.

Честно говоря, мне это кажется проблемой Angular, а не Raven.

Сказав это, я согласен с тем, что более общее решение было бы хорошим дополнением.

Просто мысль: вы пытались установить шаблон в опции ignoreUrls , который соответствует всем URL-адресам? Будет ли это делать то, что вам нужно? Что-то вроде ignoreUrls: [/./] ?

Или, может быть, установить sampleRate на ноль?

Можно запретить Raven отправлять запросы и даже перехватывать ошибки, но это не останавливает Angular ErrorHandler от проглатывания ошибок (= по крайней мере, потери отслеживания фактических строк, из которых были выброшены ошибки).

Я полагаю, вы правы, и это, в конце концов, не так уж важно для Рейвен.

Для тех, кто приходит сюда, пытаясь понять это, это была опция конфигурации, которую я сначала пропустил shouldSendCallback :

import Raven from 'raven-js';

const env = 'prod';
const release = '12345';

Raven
  .config('https://<example>@sentry.io/1234', {
    environment: env,
    release: release,
    shouldSendCallback: () => {
      // Do your logic here...
      return ['prod', 'staging'].indexOf(env) !== -1;
    },
  })
  .install();

Если shouldSendCallback равно false , Sentry не сообщит об этом. С этим 👍 нет необходимости в логике условной отчетности в вашем коде.

Сделайте свой DSN пустой строкой. Это отключит отчетность

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

if (environment.production) { Raven.config('https://@sentry.io/') .install(); }

и в провайдерах
providers: [environment.production ? { provide: ErrorHandler, useClass: RavenErrorHandler } : [], ...

Пожалуйста, дайте мне знать, если я делаю что-то не так здесь.

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