Quando estou desenvolvendo localmente, desabilito o envio de erros ao Sentry, mas ainda quero que esses erros apareçam no meu console para que possa corrigi-los.
Existe uma maneira de desabilitar o envio de exceções / eventos ao Sentry, mas ainda assim registrá-los no console?
nós envolvemos captureException
por esse motivo:
function captureException(...args) {
if (typeof Sentry !== 'undefined') {
Sentry.captureException(...args);
}
else {
console.error(...args);
}
}
Eu diria que a melhor abordagem seria usar beforeSend
`` `js
Sentry.init ({
dsn: "DSN",
beforeSend: event => {
if (IS_DEBUG) {
console.error (evento);
return null; // isso elimina o evento e nada será enviado para o sentinela
}
evento de retorno;
}
});
O que não gosto em usar beforeSend
é que não obtenho o objeto de erro original. Mas obrigado pela resposta.
@gaastonsr você faz como o segundo argumento :) 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;
}
});
Omg, isso muda tudo! obrigado, @kamilogorek.
Levei 30 minutos para descobrir por que meu console não estava registrando erros. Isso deve ser mais fácil de fazer.
O problema aqui é que, se o registrássemos por padrão, também o capturaríamos como um breadcrumb por padrão. E já fazemos isso para erros de captura. Assim, ele criaria entradas duplicadas.
Embora meus ouvidos estejam totalmente abertos para o feedback e se alguém tiver alguma ideia de como melhorar esta parte dos documentos, ficaria mais do que feliz em incluí-lo :)
O problema aqui é que, se o registrássemos por padrão, também o capturaríamos como um breadcrumb por padrão. E já fazemos isso para erros de captura. Assim, ele criaria entradas duplicadas.
Embora meus ouvidos estejam totalmente abertos para o feedback e se alguém tiver alguma ideia de como melhorar esta parte dos documentos, ficaria mais do que feliz em incluí-lo :)
É um comportamento realmente inesperado que o Sentinela detecta erros e não os mostra no console!
Também passei uma hora descobrindo por que meu aplicativo não funciona embora o console esteja limpo.
Isso definitivamente deve ser mudado.
Acho que você pode filtrar o erro do breadcrumb no lado do servidor.
Ou talvez registre-o no console em setTimeout
callback, para que a localização atual já tenha sido capturada. Como eu faço atualmente:
Sentry.init({
dsn: 'DSN',
beforeSend: (event, hint) => {
setTimeout(() => console.error(hint.originalException || hint.syntheticException), 0);
return event;
}
});
@vitalets foi alterado em 5.9.0
. Você verá erros no console agora também.
@vitalets foi alterado em
5.9.0
. Você verá erros no console agora também.
@kamilogorek
Não funciona para mim em sentry/browser 5.9.1
(chrome 78, osx).
Aqui está o código:
Sentry.init({ dsn: 'dsn' });
setTimeout(() => {throw new Error('abc')}, 3000);
O console está vazio. A guia Rede mostra que o erro foi enviado para o sentinela.
Sem o erro de sentinela é mostrado:
// Sentry.init({ dsn: 'dsn' });
setTimeout(() => {throw new Error('abc')}, 3000);
ele registra para captureException, não para evento de captura:
Para registrar captureEvent e captureException, modificamos ligeiramente a solução do
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 também é o padrão para o pacote @sentry/node
? Eu tenho a versão 5.9.0
e vejo a função beforeSend
sendo chamada, mas não vejo nada registrado no console.
Também não vejo erros no console com 5.10.1. O registro seria suficiente se a depuração fosse definida como verdadeira.
Isso é o que acontece quando você não lê as especificações até o fim ...
https://html.spec.whatwg.org/multipage/webappapis.html#the -event-handler-processing-algorithm
Se o tratamento de evento de erro especial for verdadeiro
Se o valor de retorno for verdadeiro, defina o sinalizador de cancelado do evento.
De outra forma
Se o valor de retorno for falso, defina o sinalizador de cancelamento do evento.
E então você rola ...
Existem duas exceções na plataforma, por razões históricas:
Os manipuladores onerror em objetos globais, onde retornar true cancela o evento
Vou atualizar o código de acordo
Isso é o que acontece quando você não lê as especificações
Ninguém lê as especificações até o fim :)
Obrigado pela correção!
Se estou lendo este tópico corretamente, então a versão atual do sentry deve mostrar erros no console ao mesmo tempo que os envia para o painel do sentry. Não estou tendo esse comportamento.
Aqui está como estou carregando o sentinela em minha página:
<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>
Aqui está minha chamada de inicialização:
Sentry.init({
dsn: 'https://_________.ingest.sentry.io/___________',
integrations: [new Sentry.Integrations.Vue({Vue, attachProps: true})],
});
Eu adicionei a seguinte linha de produção de erro:
window.undef.undef += 1;
Quando eu carrego a página e acionar a linha de erro, nada aparece no console, mas vejo o erro no painel do sentinela. Se eu comentar a chamada Sentry.init
então vejo TypeError
no console js.
Eu esperava, com base na minha leitura deste tópico, que veria o erro no console js enquanto também registrava no painel do sentry. Isso não é correto? Ainda preciso usar o gancho beforeSend
?
Percebo agora que preciso passar logErrors: true
para a chamada de Integrations.Vue
:
new Sentry.Integrations.Vue({Vue, attachProps: true, logErrors: true}
Desculpe, eu deveria ter lido a documentação mais de perto!
Comentários muito úteis
@gaastonsr você faz como o segundo argumento :) https://docs.sentry.io/learn/filtering/?platform=browser#before -send