Sentry-javascript: Как записывать исключения (`captureException`) тоже в консоль

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

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

Есть ли способ отключить отправку исключений / событий в Sentry, но по-прежнему записывать их в консоль?

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

@gaastonsr вы делаете в качестве второго аргумента :) https://docs.sentry.io/learn/filtering/?platform=browser#before -send

Sentry.init({
  dsn: "DSN",
  beforeSend: (event, hint) => {
   if (IS_DEBUG) {
     console.error(hint.originalException || hint.syntheticException);
     return null; // this drops the event and nothing will be sent to sentry
   }
   return event;
  }
});

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

мы обернули captureException по этой причине:

function captureException(...args) {
    if (typeof Sentry !== 'undefined') {
        Sentry.captureException(...args);
    }
    else {
        console.error(...args);
    }
}

Я бы сказал, что лучшим подходом было бы использование beforeSend
`` js
Sentry.init ({
dsn: "DSN",
beforeSend: event => {
if (IS_DEBUG) {
console.error (событие);
return null; // это отбрасывает событие и ничего не будет отправлено на стражу
}
событие возврата;
}
});

Что мне не нравится в использовании beforeSend это то, что я не получаю исходный объект ошибки. Но спасибо за ответ.

@gaastonsr вы делаете в качестве второго аргумента :) https://docs.sentry.io/learn/filtering/?platform=browser#before -send

Sentry.init({
  dsn: "DSN",
  beforeSend: (event, hint) => {
   if (IS_DEBUG) {
     console.error(hint.originalException || hint.syntheticException);
     return null; // this drops the event and nothing will be sent to sentry
   }
   return event;
  }
});

Ой, это все меняет! спасибо, @kamilogorek.

Мне потребовалось 30 минут, чтобы понять, почему моя консоль не регистрирует ошибки. Это должно быть проще.

Проблема здесь в том, что если бы мы регистрировали его по умолчанию, мы бы также записали его как хлебную крошку по умолчанию. И мы уже делаем это для ошибок захвата. Таким образом, будут создаваться повторяющиеся записи.
Хотя мои уши полностью открыты для отзывов, и если у кого-то есть идеи, как улучшить эту часть документации, я был бы более чем рад включить ее :)

Проблема здесь в том, что если бы мы регистрировали его по умолчанию, мы бы также записали его как хлебную крошку по умолчанию. И мы уже делаем это для ошибок захвата. Таким образом, будут создаваться повторяющиеся записи.
Хотя мои уши полностью открыты для отзывов, и если у кого-то есть идеи, как улучшить эту часть документации, я был бы более чем рад включить ее :)

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

Я думаю, вы можете отфильтровать ошибку из хлебных крошек на стороне сервера.
Или, может быть, зарегистрируйте его на консоли в обратном вызове setTimeout , чтобы хлебные крошки уже были захвачены. Как я сейчас делаю:

Sentry.init({
  dsn: 'DSN',
  beforeSend: (event, hint) => {
    setTimeout(() => console.error(hint.originalException || hint.syntheticException), 0);
    return event;
  }
});

@vitalets изменен в 5.9.0 . Теперь вы также увидите ошибки в консоли.

@vitalets изменен в 5.9.0 . Теперь вы также увидите ошибки в консоли.

@kamilogorek
У меня не работает на sentry/browser 5.9.1 (chrome 78, osx).
Вот код:

Sentry.init({  dsn: 'dsn' });
setTimeout(() => {throw new Error('abc')}, 3000);

Консоль пуста. Вкладка «Сеть» показывает, что ошибка была отправлена ​​на стражу.

Без караула отображается ошибка:

// Sentry.init({  dsn: 'dsn' });
setTimeout(() => {throw new Error('abc')}, 3000);

image

он регистрирует исключение captureException, а не событие захвата:
Чтобы зарегистрировать captureEvent и captureException, мы немного изменили решение @kamilogorek :

Sentry.init({
  dsn: "DSN",
  beforeSend: (event, hint) => {
   if (IS_DEBUG) {
     console.error(hint.originalException || hint.syntheticException || event);
     return null; // this drops the event and nothing will be sent to sentry
   }
   return event;
  }
});

@kamilogorek , это @sentry/node ? У меня есть версия 5.9.0 и я вижу, что beforeSend функция

Я также не вижу ошибок на консоли с 5.10.1. Ведение журнала будет достаточно, если для отладки установлено значение true.

Вот что происходит, если не читать спецификации до самого конца ...

https://html.spec.whatwg.org/multipage/webappapis.html#the -event-handler-processing-algorithm

Если обработка особых событий ошибки верна
Если возвращаемое значение - истина, установить флаг отмены события.
Иначе
Если возвращаемое значение - false, установить флаг отмены события.

А потом прокручиваешь ...

В платформе есть два исключения по историческим причинам:
Обработчики ошибок onerror для глобальных объектов, где возвращение истины отменяет событие.

Я обновлю код соответственно

Вот что происходит, когда вы не читаете спецификации

Спецификации до конца никто не читает :)

Спасибо за исправление!

Если я правильно читаю эту ветку, то текущая версия sentry должна отображать ошибки в консоли, а также отправлять их на панель мониторинга sentry. Я не испытываю такого поведения.

Вот как я загружаю часовую на свою страницу:

<script src="https://browser.sentry-cdn.com/5.20.1/bundle.min.js" integrity="sha384-O8HdAJg1h8RARFowXd2J/r5fIWuinSBtjhwQoPesfVILeXzGpJxvyY/77OaPPXUo" crossorigin="anonymous"></script>
<script src="https://browser.sentry-cdn.com/5.20.1/vue.min.js" crossorigin="anonymous"></script>

Вот мой вызов инициализации:

  Sentry.init({
    dsn: 'https://_________.ingest.sentry.io/___________',
    integrations: [new Sentry.Integrations.Vue({Vue, attachProps: true})],
  });

Я добавил следующую строку с ошибкой:

 window.undef.undef += 1;

Когда я загружаю страницу и вызываю строку с ошибкой, в консоли ничего не отображается, но я вижу ошибку на панели мониторинга часов. Если я закомментировать Sentry.init вызова , то я вижу TypeError в консоли Js.

Я ожидал, основываясь на моем чтении этого потока, что я увижу ошибку в консоли js, а также запишу ее на панель мониторинга часов. Это не так? Мне все еще нужно использовать хук beforeSend ?

Теперь я понимаю, что мне нужно передать logErrors: true Integrations.Vue вызову

new Sentry.Integrations.Vue({Vue, attachProps: true, logErrors: true}

Извините, мне следовало прочитать документацию повнимательнее!

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