Sentry-javascript: Cómo registrar excepciones (`captureException`) en la consola también

Creado en 30 sept. 2018  ·  17Comentarios  ·  Fuente: getsentry/sentry-javascript

Cuando estoy desarrollando localmente, deshabilito el envío de errores a Sentry, pero aún quiero que esos errores se muestren en mi consola para poder corregirlos.

¿Hay alguna forma de deshabilitar el envío de excepciones / eventos a Sentry pero aún así registrarlos en la consola?

Comentario más útil

@gaastonsr lo haces como 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 comentarios

envolvemos captureException por esa razón:

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

Yo diría que el mejor enfoque sería usar beforeSend
`` js
Sentry.init ({
dsn: "DSN",
beforeSend: event => {
si (ES_DEBUG) {
console.error (evento);
devolver nulo; // esto elimina el evento y no se enviará nada al centinela
}
evento de retorno;
}
});

Lo que no me gusta de usar beforeSend es que no obtengo el objeto de error original. Pero gracias por la respuesta.

@gaastonsr lo haces como 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;
  }
});

¡Dios mío, esto lo cambia todo! gracias, @kamilogorek.

Me tomó 30 minutos descubrir por qué mi consola no registraba errores. Esto debería ser más fácil de hacer.

El problema aquí es que si lo registramos de forma predeterminada, también lo capturaríamos como una ruta de navegación de forma predeterminada. Y ya hacemos esto para los errores de captura. Por lo tanto, crearía entradas duplicadas.
Aunque mis oídos están completamente abiertos a los comentarios y si alguien tiene alguna idea de cómo mejorar esta parte de los documentos, estaría más que contento de incluirla :)

El problema aquí es que si lo registramos de forma predeterminada, también lo capturaríamos como una ruta de navegación de forma predeterminada. Y ya hacemos esto para los errores de captura. Por lo tanto, crearía entradas duplicadas.
Aunque mis oídos están completamente abiertos a los comentarios y si alguien tiene alguna idea de cómo mejorar esta parte de los documentos, estaría más que contento de incluirla :)

¡Es un comportamiento realmente inesperado que el centinela detecte errores y no los muestre en la consola!
También pasé una hora descubriendo por qué mi aplicación no funciona aunque la consola está clara.
Esto definitivamente debería cambiarse.

Creo que puede filtrar el error de la ruta de navegación en el lado del servidor.
O tal vez regístrelo en la consola en setTimeout callback, por lo que ya se capturarán las migas de pan. Como hago actualmente:

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

@vitalets se ha cambiado en 5.9.0 . Ahora también verá errores en la consola.

@vitalets se ha cambiado en 5.9.0 . Ahora también verá errores en la consola.

@kamilogorek
No me funciona en sentry/browser 5.9.1 (chrome 78, osx).
Aquí está el código:

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

La consola está vacía. La pestaña Red muestra que el error se envió al centinela.

Sin centinela se muestra el error:

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

image

registra para captureException no para el evento de captura:
Para registrar captureEvent y captureException, modificamos ligeramente la solución de @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 ¿ es también el predeterminado para el paquete @sentry/node ? Tengo la versión 5.9.0 y veo que se está llamando a la función beforeSend , pero no veo nada registrado en la consola.

Tampoco veo errores en la consola con 5.10.1. El registro sería suficiente si la depuración se establece en verdadero.

Esto es lo que sucede cuando no lee las especificaciones hasta el final ...

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

Si el manejo de eventos de error especial es verdadero
Si el valor de retorno es verdadero, entonces configure el indicador cancelado del evento.
De lo contrario
Si el valor de retorno es falso, establezca el indicador de cancelación del evento.

Y luego te desplazas ...

Hay dos excepciones en la plataforma, por razones históricas:
Los controladores de onerror en objetos globales, donde devolver verdadero cancela el evento

Actualizaré el código en consecuencia

Esto es lo que sucede cuando no lee las especificaciones

Nadie lee las especificaciones hasta el final :)

¡Gracias por la corrección!

Si estoy leyendo este hilo correctamente, la versión actual de centinela debería mostrar errores en la consola y al mismo tiempo enviarlos al panel de control. No estoy experimentando este comportamiento.

Así es como estoy cargando centinela en mi 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>

Aquí está mi llamada de inicialización:

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

Agregué la siguiente línea de producción de errores:

 window.undef.undef += 1;

Cuando cargo la página y activo la línea de error, no aparece nada en la consola, pero veo el error en el panel de control. Si comento la llamada Sentry.init , veo un TypeError en la consola js.

Esperaba, según mi lectura de este hilo, que vería el error en la consola js y al mismo tiempo lo registraría en el panel de control. ¿No es eso correcto? ¿Todavía necesito usar el gancho beforeSend ?

Ahora me doy cuenta de que necesito pasar logErrors: true a la llamada Integrations.Vue :

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

Lo siento, debería haber leído los documentos más de cerca.

¿Fue útil esta página
0 / 5 - 0 calificaciones