Sentry-javascript: Désactiver pour le développement

Créé le 3 mai 2013  ·  19Commentaires  ·  Source: getsentry/sentry-javascript

J'ai du mal à comprendre comment restaurer l'événement window.onerror après avoir inclus Raven en tant que dépendance AMD.

Je ne veux pas du tout utiliser Raven pendant le développement, donc je n'appelle que config() / install() en mode production. Mais en mode dev, toutes les erreurs sont toujours générées par TraceKit.report() ... Ce qui est assez frustrant car le fichier/numéro de ligne/trace de pile n'est plus utile dans les outils de développement du navigateur.

J'ai essayé d'appeler uninstall() en mode dev mais cela n'a pas aidé. Y a-t-il une raison pour laquelle vous vous liez à window.onerror quoi qu'il arrive au lieu de le faire à l'intérieur config() ou install() ?

Commentaire le plus utile

Pour ceux qui viennent ici pour essayer de comprendre, c'était une option de configuration que j'avais ratée au début shouldSendCallback :

import Raven from 'raven-js';

const env = 'prod';
const release = '12345';

Raven
  .config('https://<example>@sentry.io/1234', {
    environment: env,
    release: release,
    shouldSendCallback: () => {
      // Do your logic here...
      return ['prod', 'staging'].indexOf(env) !== -1;
    },
  })
  .install();

Si shouldSendCallback est false la sentinelle ne rapportera pas. Pas besoin de logique de rapport conditionnel dans votre code avec ceci 👍 .

Tous les 19 commentaires

J'ai trouvé une solution, mais ce n'est pas l'idéal...

J'essayais de définir manuellement window.onerror = null en mode dev, mais même cela n'a pas fonctionné. Le problème était que j'étais require() ing Raven dans quelques modules, et à chaque fois Raven se reliait à window.onerror .

Donc, à la place, j'ai arrêté d'utiliser noConflict() , je l'ai inclus en tant que dépendance globale dans la configuration requirejs et je l'ai supprimé en tant que dépendance locale des autres modules. Cela a permis de définir window.onerror = null sans que Raven ne réassocie l'événement plus tard.

Correction assez désordonnée cependant :(

@adambiggs Une autre solution consiste à créer un module AMD d'emballage pour Raven-js qui effectue l'appel de configuration et d'installation, ce qui signifie que vous n'importez qu'une seule fois raven-js, mais que vous pouvez importer votre propre module plusieurs fois, autant que je sache.

Je pense que cela peut être lié à : https://github.com/getsentry/raven-js/pull/109 et https://github.com/getsentry/raven-js/issues/91#issuecomment -15560074

Cela ne devrait plus être pertinent. window.onerror n'est pas muté jusqu'à l'appel install() et est restauré lors de l'appel uninstall() . Faites-moi savoir s'il y a un autre problème.

@mattrobenolt , j'ai mis à jour vers 1.1.11 et je n'appelle pas install() et je me retrouve toujours avec des erreurs de gestion de corbeau.

@bobbyrenwick Pouvez-vous me lier à quelque chose de public qui montre ce qui se passe ?

Existe-t-il une solution de contournement pour cela ? Même lorsque je n'appelle jamais Raven.config() ou Raven.install() ou si j'appelle Raven.config(false) , les gestionnaires jquery ou onerror semblent toujours être installés. La seule solution de contournement semble ne jamais charger le corbeau js en premier lieu (ce qui est loin d'être idéal).

Voir : #282 :)

Fournissez-vous #282 comme arrière-plan ? Je ne vois aucune solution de contournement là-dedans.

Oui, car il n'y a pas encore de solution.

Ma seule solution consiste à utiliser require() dans un bloc if (le reste de mon code utilise maintenant import :(

Y a-t-il une mise à jour à ce sujet ?

Toute mise à jour? Cela ne fonctionne TOUJOURS pas correctement.

EDIT : Désolé pour mon ton. J'ai eu une longue journée.

Qu'essayez-vous de faire? Je fais ceci, qui fonctionne très bien:

if (process.env.RAVEN_DSN) {
  require('raven-js').config(process.env.RAVEN_DSN, {
    environment: process.env.NODE_ENV,
  }).install();
}

process.env.RAVEN_DSN est le DSN bien sûr, et qui n'est défini que lors de la construction d'environnements où je veux que Raven s'exécute, via webpack.EnvironmentPlugin .

Dans votre version, il est impossible de configurer conditionnellement un Angular ErrorHandler. Soit vous le configurez dans tous les cas, puis il avale vos erreurs quoi qu'il arrive, soit vous ne le répertoriez pas mais vous le répertoriez toujours dans les fournisseurs, ce qui provoque le blocage du module entier.

Autant que je sache, il est impossible d'utiliser ou de ne pas utiliser un fournisseur angulaire basé sur une condition.

J'ai fait de nombreuses itérations de tentatives de réparation aujourd'hui.

Pour être honnête, cela me semble être un problème angulaire plutôt qu'un problème Raven.

Cela dit, je suis d'accord qu'une solution plus générale serait un bon ajout.

Juste une réflexion : avez-vous essayé de définir un modèle dans l' option ignoreUrls qui correspond à toutes les URL ? Cela ferait-il ce dont vous avez besoin ? Quelque chose comme ignoreUrls: [/./] ?

Ou peut-être mettre sampleRate à zéro ?

Il est possible d'empêcher Raven d'envoyer des requêtes et même de détecter des erreurs, mais cela n'empêche pas Angular ErrorHandler d'avaler des erreurs (= au moins perdre la trace des lignes réelles à partir desquelles les erreurs ont été lancées).

Je suppose que vous avez raison et que ce n'est pas vraiment un problème avec Raven après tout.

Pour ceux qui viennent ici pour essayer de comprendre, c'était une option de configuration que j'avais ratée au début shouldSendCallback :

import Raven from 'raven-js';

const env = 'prod';
const release = '12345';

Raven
  .config('https://<example>@sentry.io/1234', {
    environment: env,
    release: release,
    shouldSendCallback: () => {
      // Do your logic here...
      return ['prod', 'staging'].indexOf(env) !== -1;
    },
  })
  .install();

Si shouldSendCallback est false la sentinelle ne rapportera pas. Pas besoin de logique de rapport conditionnel dans votre code avec ceci 👍 .

Faites de votre DSN la chaîne vide. Cela désactivera les rapports

J'ai utilisé cette méthode. Cela semble fonctionner pour moi

if (environment.production) { Raven.config('https://@sentry.io/') .install(); }

et chez les prestataires
providers: [environment.production ? { provide: ErrorHandler, useClass: RavenErrorHandler } : [], ...

S'il vous plaît laissez-moi savoir si je fais quelque chose de mal ici.

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