Sentry-javascript: Comment enregistrer les exceptions (`captureException`) sur la console également

Créé le 30 sept. 2018  ·  17Commentaires  ·  Source: getsentry/sentry-javascript

Lorsque je développe localement, je désactive l'envoi d'erreurs à Sentry, mais je veux toujours que ces erreurs s'affichent dans ma console afin que je puisse les corriger.

Existe-t-il un moyen de désactiver l'envoi d'exceptions/d'événements à Sentry tout en les connectant à la console ?

Commentaire le plus utile

@gaastonsr vous faites comme deuxième argument :) 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;
  }
});

Tous les 17 commentaires

nous avons enveloppé captureException pour cette raison :

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

Je dirais que la meilleure approche serait d'utiliser beforeSend
```js
Sentinelle.init({
dsn: "DSN",
avantEnvoi : événement => {
si (IS_DEBUG) {
console.error(événement);
renvoie null ; // cela supprime l'événement et rien ne sera envoyé à sentinelle
}
événement de retour ;
}
});

Ce que je n'aime pas dans l'utilisation de beforeSend c'est que je n'obtiens pas l'objet d'erreur d'origine. Mais merci pour la réponse.

@gaastonsr vous faites comme deuxième argument :) 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, ça change tout ! merci, @kamilogorek.

Il m'a fallu 30 minutes pour trouver pourquoi ma console n'enregistrait pas les erreurs. Cela devrait être plus facile à faire.

Le problème ici est que si nous l'enregistrions par défaut, nous le capturerions également en tant que fil d'Ariane par défaut. Et nous le faisons déjà pour les erreurs de capture. Ainsi, cela créerait des entrées en double.
Bien que mes oreilles soient complètement ouvertes pour les commentaires et si quelqu'un a une idée de la façon d'améliorer cette partie de la documentation, je serais plus qu'heureux de l'inclure :)

Le problème ici est que si nous l'enregistrions par défaut, nous le capturerions également en tant que fil d'Ariane par défaut. Et nous le faisons déjà pour les erreurs de capture. Ainsi, cela créerait des entrées en double.
Bien que mes oreilles soient complètement ouvertes pour les commentaires et si quelqu'un a une idée de la façon d'améliorer cette partie de la documentation, je serais plus qu'heureux de l'inclure :)

C'est vraiment un comportement inattendu que sentinelle détecte les erreurs et ne les affiche pas dans la console !
J'ai également passé une heure à découvrir pourquoi mon application ne fonctionne pas bien que la console soit claire.
Cela devrait certainement être changé.

Je pense que vous pouvez filtrer les erreurs du fil d'Ariane côté serveur.
Ou peut-être connectez-le à la console dans le rappel setTimeout , de sorte que le fil d'Ariane sera déjà capturé. Comme je le fais actuellement :

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

@vitalets il a été changé en 5.9.0 . Vous verrez également des erreurs dans la console maintenant.

@vitalets il a été changé en 5.9.0 . Vous verrez également des erreurs dans la console maintenant.

@kamilogorek
Cela ne fonctionne pas pour moi sur sentry/browser 5.9.1 (chrome 78, osx).
Voici le code :

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

La console est vide. L'onglet Réseau indique que l'erreur a été envoyée à sentinelle.

Sans erreur de sentinelle s'affiche :

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

image

il enregistre pour captureException pas pour l'événement de capture :
Pour enregistrer captureEvent et captureException, nous avons légèrement modifié la solution de

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 est-ce aussi la valeur par défaut pour le package @sentry/node ? J'ai la version 5.9.0 et je vois que la fonction beforeSend est appelée mais je ne vois rien de connecté dans la console.

Je ne vois pas non plus d'erreurs sur la console avec 5.10.1. La journalisation serait suffisante si debug est défini sur true.

C'est ce qui arrive quand on ne lit pas les spécifications jusqu'au bout...

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

Si la gestion des événements d'erreur spéciale est vraie
Si la valeur de retour est vraie, définissez l'indicateur d'annulation de l'événement.
Autrement
Si la valeur de retour est false, définissez l'indicateur d'annulation de l'événement.

Et puis tu fais défiler...

Il existe deux exceptions dans la plateforme, pour des raisons historiques :
Les gestionnaires onerror sur les objets globaux, où le retour de true annule l'événement

Je vais mettre à jour le code en conséquence

C'est ce qui arrive quand vous ne lisez pas les spécifications

Personne ne lit les spécifications jusqu'au bout :)

Merci pour la réparation!

Si je lis correctement ce fil, la version actuelle de sentinelle devrait afficher des erreurs dans la console tout en les envoyant également au tableau de bord de sentinelle. Je ne rencontre pas ce comportement.

Voici comment je charge sentinelle sur ma page :

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

Voici mon appel d'initialisation :

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

J'ai ajouté la ligne de production d'erreur suivante :

 window.undef.undef += 1;

Lorsque je charge la page et déclenche la ligne d'erreur, rien ne s'affiche dans la console, mais je vois l'erreur dans le tableau de bord de sentinelle. Si je commente l'appel Sentry.init je vois un TypeError dans la console js.

D'après ma lecture de ce fil, je m'attendais à voir l'erreur dans la console js tout en la connectant au tableau de bord de sentinelle. N'est-ce pas exact? Dois-je toujours utiliser le crochet beforeSend ?

Je me rends compte maintenant que je dois passer logErrors: true à l'appel Integrations.Vue :

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

Désolé, j'aurais dû lire la doc de plus près !

Cette page vous a été utile?
0 / 5 - 0 notes