Sentry-javascript: Como registrar exceções (`captureException`) no console também

Criado em 30 set. 2018  ·  17Comentários  ·  Fonte: getsentry/sentry-javascript

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?

Comentários muito úteis

@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;
  }
});

Todos 17 comentários

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);

image

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!

Esta página foi útil?
0 / 5 - 0 avaliações