Sentry-javascript: Désactiver sentinelle sur l'environnement de développement lors de l'utilisation du plugin angulaire

Créé le 17 déc. 2015  ·  15Commentaires  ·  Source: getsentry/sentry-javascript

Pour le moment, il n'est pas possible de désactiver le plugin sentinelle car le module ngRaven ne se charge pas.

Sur l'environnement de développement, j'utilise ce qui suit sans fournir le DSN
Raven.config().install()

Le rappel qui enregistre le fournisseur de corbeau n'est pas appelé

Raven.addPlugin(function () {
    angular.module('ngRaven', [])
        .provider('Raven',  RavenProvider)
        .config(['$provide', ExceptionHandlerProvider]);
});

Parce que la fonction d'installation n'appelle pas le plugin qui installe le module
isSetup() a échoué car le serveur global est null

install: function() {
    if (isSetup() && !isRavenInstalled) {
        TraceKit.report.subscribe(handleStackInfo);

        // Install all of the plugins
        each(plugins, function(_, plugin) {
            plugin();
        });

        isRavenInstalled = true;
    }

    return Raven;
},

Commentaire le plus utile

J'ai eu une demande similaire de @benvinegar et il a souligné que vous pouvez utiliser :

Raven.config('your dsn', {
  shouldSendCallback: function () {
    return false;
  }
}).install();

Et cela empêchera Raven de rapporter. Basculez le statut return sur TRUE et le rapport commencera. C'est du moins ce qu'on m'a dit. Nous prévoyons d'utiliser ceci plus une commande de déploiement sed pour retourner le booléen au moment du déploiement.

Tous les 15 commentaires

Relatif aux #414 et #413

@Sija @odedfos – pouvez-vous commenter le n° 414 ? Comme, cette RP résoudra-t-elle ce problème ?

@benvinegar semble légitime pour moi, bien que je puisse imaginer le cas où vous voudriez que le fournisseur Raven soit disponible, même sans appeler .config() - comme définir le drapeau Raven.debug par exemple

J'ai eu une demande similaire de @benvinegar et il a souligné que vous pouvez utiliser :

Raven.config('your dsn', {
  shouldSendCallback: function () {
    return false;
  }
}).install();

Et cela empêchera Raven de rapporter. Basculez le statut return sur TRUE et le rapport commencera. C'est du moins ce qu'on m'a dit. Nous prévoyons d'utiliser ceci plus une commande de déploiement sed pour retourner le booléen au moment du déploiement.

J'ai fait quelque chose de similaire à ce qui précède pour permettre à install() de réussir et pour éviter de faire des requêtes http pour envoyer les erreurs ( window.SERVER_FLAGS est la façon dont je passe mon sentryURL de mon backend au frontend).

if (!window.SERVER_FLAGS.sentryURL) {
  // Never bother sending data to sentry
  Raven.setShouldSendCallback(function() { return false });
  // Allow Raven.install() to succeed
  Raven.isSetup = function() {
    return true;
  }
}
Raven
.config(window.SERVER_FLAGS.sentryURL, {
  release: window.SERVER_FLAGS.version,
  debug: true,
})
.addPlugin(Raven.Plugins.Angular)
.install();

Cela semble fonctionner assez bien et permet toujours à Raven de fonctionner, mais il ne rapporte tout simplement pas. Je n'aime vraiment pas avoir à pirater isSetup mais c'est le seul moyen que j'ai pu trouver qui soit peu invasif pour charger ngRaven .

Pour ceux qui tombent sur ça

Si vous utilisez webpack pour créer votre application, vous utilisez des variables d'environnement pour configurer Raven en utilisant le plugin d'environnement

https://webpack.js.org/plugins/environment-plugin/

par exemple

if (process.env.NODE_ENV === 'dev') {
  Raven.setShouldSendCallback(() => { return false; });
  Raven.isSetup = () => { return true; };
}

Raven
  .config(process.env.RAVEN_DSN, {
    debug: process.env.RAVEN_DEBUG,
  })
  .addPlugin(require('raven-js/plugins/angular'), angular)
  .install();

isSetup est maintenant en lecture seule, donc la méthode ci-dessus ne fonctionne plus.

J'ai trouvé une solution de contournement suivante, qui semble fonctionner, bien que je ne sache pas pourquoi.

let isProduction = process.env.ENV === 'build'; // variable provided by webpack

Raven
.config('https://<key>@sentry.io/<project>', {
  shouldSendCallback: function () {
    return isProduction;
  }
})
.install();

if (!isProduction) {
  Raven.uninstall(); // this is necessary! for some reason
}

export class RavenErrorHandler implements ErrorHandler {
  handleError(err: any): void {
    console.error(err); // this still fires after uninstalling!!! it's because it's already listed as Angular provider 
    Raven.captureException(err)
  }
}

C'est toujours une solution terrible car elle détourne toutes mes erreurs donc je ne sais pas à partir de quelle ligne elles ont été lancées. Au moins, je suppose que ce n'est pas aussi terrible que de ne pas les voir du tout.

J'ai utilisé cette façon. ça a l'air de marcher pour moi

`si (environnement.production) {
Raven.config('https://@sentry.io/')
.installer();
}

et chez les prestataires
fournisseurs : [environnement.production ? { fournir : ErrorHandler, useClass : RavenErrorHandler } : [], ...`

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

Ça m'a l'air bien. Apparemment, le problème d'origine a déjà été résolu ici, donc je ferme celui-ci. N'hésitez pas à rouvrir si c'est toujours d'actualité.

Plus facile sur 'app.module.ts'

import {environment} from '../environments/environment';
...
    providers: [
    LocalStorageService,
    EventLocalStorageService,
    EventService,
    ActionButtonService,
    WeatherUndergroundWeatherService,
    GeoLocationInfoService,
    AppEventColorService,
    // {provide: ErrorHandler, useClass: RavenErrorHandler}
    {provide: ErrorHandler, useClass: environment.production ? RavenErrorHandler : ErrorHandler} // See here
  ],

et

  .config('key', {
    shouldSendCallback: function () {
      return environment.production;
    }
  })
  .install();

De cette façon, vous avez les messages localdev dans votre console (sinon Sentry en récupère) et en production, vous obtenez ceux que vous voulez avoir

Au moins dans Chrome (pas sûr pour les autres navigateurs), une autre façon d'empêcher Raven de "détourner" la console de développement est de blackboxer raven.js :

https://gist.github.com/paulirish/c307a5a585ddbcc17242
https://developer.chrome.com/devtools/docs/blackboxing

2018-05-11_12-45-12

Et qu'en est-il de Sentry ? Je n'utilise pas Raven, j'ai Sentry et je souhaite le désactiver dans l'environnement de développement de mon hôte local.

https://dev.to/angular/tracking-errors-in-angular-with-sentry-4oo0 — le voici

@artuska, vous pouvez soit fournir un DSN vide, soit utiliser beforeSend pour arrêter le transport.

Sentry.init({
  dsn: process.env.development ? '' : 'your-real-dsn'
})

ou

Sentry.init({
  dsn: 'your-real-dsn',
  beforeSend(event) {
    if (process.env.development) return null;
    return event;
  }
})

Je ne pense pas que cela désactive réellement Sentry. Il s'arrête juste si d'envoyer
Les données. Pourtant, la chapelure enveloppe la plupart des problèmes, ce qui craint

Le lundi 9 décembre 2019 à 10h15 Kamil Ogórek [email protected]
a écrit:

@artuska https://github.com/artuska vous pouvez soit fournir un DSN vide soit
utilisez beforeSend pour arrêter le transport.

Sentinelle.init({
dsn : processus.env.développement ? '' : 'votre-vrai-dsn'
})

ou

Sentinelle.init({
dsn : 'votre-vrai-dsn',
avantEnvoyer (événement) {
if (process.env.development) renvoie null ;
événement de retour ;
}
})

-
Vous recevez ceci parce que vous avez commenté.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/getsentry/sentry-javascript/issues/436?email_source=notifications&email_token=AAJVX45ZEIJWZSXZSBQ5ZQLQXYECDA5CNFSM4BW42VRKYY3PNVWWK3TUL52HS4DFVREXG2XVMYGW63LNMVY13
ou se désinscrire
https://github.com/notifications/unsubscribe-auth/AAJVX4YBWA3R6SM63NV5JPDQXYECDANCNFSM4BW42VRA
.

@jimmykane correct, si vous voulez désactiver Sentry, appelez simplement init condition

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