Когда я разрабатываю локально, я отключаю отправку ошибок в Sentry, но я все равно хочу, чтобы эти ошибки отображались в моей консоли, чтобы я мог их исправить.
Есть ли способ отключить отправку исключений / событий в Sentry, но по-прежнему записывать их в консоль?
мы обернули 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);
он регистрирует исключение 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}
Извините, мне следовало прочитать документацию повнимательнее!
Самый полезный комментарий
@gaastonsr вы делаете в качестве второго аргумента :) https://docs.sentry.io/learn/filtering/?platform=browser#before -send