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;
},
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://
.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
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
Commentaire le plus utile
J'ai eu une demande similaire de @benvinegar et il a souligné que vous pouvez utiliser :
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éploiementsed
pour retourner le booléen au moment du déploiement.