Im Moment ist es nicht möglich, das Sentry-Plugin zu deaktivieren, da das ngRaven-Modul nicht geladen werden kann.
Auf der Entwicklungsumgebung verwende ich Folgendes ohne Angabe des DSN
Raven.config().install()
Der Rückruf, der den Rabenanbieter registriert, wird nicht angerufen
Raven.addPlugin(function () {
angular.module('ngRaven', [])
.provider('Raven', RavenProvider)
.config(['$provide', ExceptionHandlerProvider]);
});
Weil die install-Funktion nicht das Plugin aufruft, das das Modul installiert
isSetup() ist fehlgeschlagen, weil globalServer null ist
install: function() {
if (isSetup() && !isRavenInstalled) {
TraceKit.report.subscribe(handleStackInfo);
// Install all of the plugins
each(plugins, function(_, plugin) {
plugin();
});
isRavenInstalled = true;
}
return Raven;
},
Bezogen auf #414 und #413
@Sija @odedfos – kannst du #414 kommentieren? Wird diese PR dieses Problem angehen?
@benvinegar scheint für mich legitim zu sein, obwohl ich mir einen Fall vorstellen könnte, in dem Sie möchten, dass der Anbieter Raven
verfügbar ist, auch ohne .config()
anzurufen – wie zum Beispiel das Setzen des Flags Raven.debug
Ich hatte eine ähnliche Anfrage von @benvinegar und er wies darauf hin, dass Sie
Raven.config('your dsn', {
shouldSendCallback: function () {
return false;
}
}).install();
Und das wird Raven von der Berichterstattung abhalten. Ändern Sie den Status von return
auf TRUE und es beginnt mit der Berichterstellung. Zumindest wurde mir das gesagt. Wir planen, dies plus einen Bereitstellungsbefehl sed
zu verwenden, um den Booleschen
Ich habe etwas Ähnliches wie oben gemacht, um install() erfolgreich zu machen und um zu vermeiden, dass HTTP-Anfragen gesendet werden, um die Fehler tatsächlich zu senden ( window.SERVER_FLAGS
übergebe meine SentryURL von meinem Backend an das 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();
Dies scheint ziemlich gut zu funktionieren und lässt Raven immer noch laufen, aber es meldet sich einfach nicht. Ich mag es wirklich nicht, isSetup
hacken zu müssen, aber das ist der einzige Weg, den ich finden konnte, der minimal invasiv war, um ngRaven
laden.
Für andere, die darüber stolpern
Wenn Sie Webpack zum Erstellen Ihrer Anwendung verwenden, verwenden Sie Umgebungsvariablen, um raven mithilfe des Umgebungs-Plugins zu konfigurieren
https://webpack.js.org/plugins/environment-plugin/
z.B
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 ist jetzt schreibgeschützt, sodass die obige Methode nicht mehr funktioniert.
Ich habe eine folgende Problemumgehung gefunden, die zu funktionieren scheint, obwohl ich keine Ahnung habe, warum.
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)
}
}
Es ist immer noch eine schreckliche Lösung, weil es alle meine Fehler entführt, sodass ich nicht weiß, aus welcher Zeile sie geworfen wurden. Zumindest finde ich es nicht so schlimm, sie gar nicht zu sehen.
Ich habe diesen Weg verwendet. Bei mir scheint es zu funktionieren
`if (Umwelt.Produktion) {
Raven.config('https://
.Installieren();
}
und bei Anbietern
Anbieter: [Umwelt.Produktion ? { bereitstellen: ErrorHandler, useClass: RavenErrorHandler } : [], ...`
Bitte lassen Sie mich wissen, wenn ich hier etwas falsch mache.
Sieht gut aus für mich. Anscheinend wurde das ursprüngliche Problem hier bereits beantwortet, also schließe ich dieses. Fühlen Sie sich frei, wieder zu öffnen, wenn es in irgendeiner Weise noch relevant ist.
Einfacher unter '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
],
und
.config('key', {
shouldSendCallback: function () {
return environment.production;
}
})
.install();
Auf diese Weise haben Sie die localdev-Nachrichten in Ihrer Konsole (sonst schnappt sich Sentry einige) und bei der Produktion erhalten Sie die, die Sie haben möchten
Zumindest in Chrome (bei anderen Browsern bin ich mir nicht sicher) besteht eine weitere Möglichkeit, um zu verhindern, dass Raven die Entwicklerkonsole "entführt", darin, raven.js
zu blackboxen:
https://gist.github.com/paulirish/c307a5a585ddbcc17242
https://developer.chrome.com/devtools/docs/blackboxing
Und was ist mit Sentry? Ich verwende Raven nicht, ich habe Sentry und möchte es in der Entwicklungsumgebung auf meinem localhost deaktivieren.
https://dev.to/angular/tracking-errors-in-angular-with-sentry-4oo0 — hier ist es
@artuska können Sie entweder einen leeren DSN beforeSend
, um den Transport anzuhalten .
Sentry.init({
dsn: process.env.development ? '' : 'your-real-dsn'
})
oder
Sentry.init({
dsn: 'your-real-dsn',
beforeSend(event) {
if (process.env.development) return null;
return event;
}
})
Ich glaube nicht, dass das Sentry tatsächlich deaktiviert. Es stoppt nur, wenn es nicht gesendet wird
Daten. Immer noch umhüllt das Breadcrumbs die meisten Probleme, was scheiße ist
Am Mo, 09.12.2019 um 10:15 Uhr Kamil Ogórek [email protected]
schrieb:
@artuska https://github.com/artuska Sie können entweder leeres DSN angeben oder
Verwenden Sie beforeSend, um den Transport anzuhalten.Sentry.init({
dsn: process.env.entwicklung ? '' : 'dein-real-dsn'
})oder
Sentry.init({
dsn: 'deine-echte-dsn',
vorSend(Ereignis) {
if (process.env.development) return null;
Rückkehrereignis;
}
})—
Sie erhalten dies, weil Sie einen Kommentar abgegeben haben.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/getsentry/sentry-javascript/issues/436?email_source=notifications&email_token=AAJVX45ZEIJWZSXZSBQ5ZQLQXYECDA5CNFSM4BW42VRKYY2PNVWWK3TUL52HS4DFVREXG43VMVBW63LNmentY
oder abmelden
https://github.com/notifications/unsubscribe-auth/AAJVX4YBWA3R6SM63NV5JPDQXYECDANCNFSM4BW42VRA
.
@jimmykane richtig, wenn du Sentry deaktivieren willst, ruf einfach init
bedingt an
Hilfreichster Kommentar
Ich hatte eine ähnliche Anfrage von @benvinegar und er wies darauf hin, dass Sie
Und das wird Raven von der Berichterstattung abhalten. Ändern Sie den Status von
return
auf TRUE und es beginnt mit der Berichterstellung. Zumindest wurde mir das gesagt. Wir planen, dies plus einen Bereitstellungsbefehlsed
zu verwenden, um den Booleschen