Por el momento, no es posible deshabilitar el complemento sentry porque el módulo ngRaven no se carga.
En el entorno de desarrollo utilizo lo siguiente sin proporcionar el DSN
Raven.config (). Install ()
La devolución de llamada que registra al proveedor de Raven no se llama
Raven.addPlugin(function () {
angular.module('ngRaven', [])
.provider('Raven', RavenProvider)
.config(['$provide', ExceptionHandlerProvider]);
});
Porque la función de instalación no llama al complemento que instala el módulo
isSetup () falló porque globalServer es nulo
install: function() {
if (isSetup() && !isRavenInstalled) {
TraceKit.report.subscribe(handleStackInfo);
// Install all of the plugins
each(plugins, function(_, plugin) {
plugin();
});
isRavenInstalled = true;
}
return Raven;
},
Relacionado con # 414 y # 413
@Sija @odedfos - ¿puedes comentar sobre el # 414? ¿Ese RP abordará este problema?
@benvinegar parece legítimo para mí, aunque podría imaginar un caso en el que desearía que el proveedor Raven
esté disponible, incluso sin llamar a .config()
, como configurar Raven.debug
, por ejemplo
Tuve una solicitud similar de @benvinegar y señaló que puedes usar:
Raven.config('your dsn', {
shouldSendCallback: function () {
return false;
}
}).install();
Y eso evitará que Raven informe. Cambie el estado return
a TRUE y comenzará a informar. Al menos esto es lo que me han dicho. Planeamos usar esto más un comando de implementación sed
para cambiar el booleano en el momento de la implementación.
Hice algo similar a lo anterior para permitir que install () tuviera éxito y para evitar realizar solicitudes http para enviar los errores ( window.SERVER_FLAGS
es la forma en que paso mi sentryURL de mi backend al 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();
Esto parece estar funcionando bastante bien y aún permite que Raven se ejecute, pero simplemente no informa. Realmente no me gusta tener que hackear isSetup
pero es la única forma en que pude encontrar que era mínimamente invasiva para cargar ngRaven
.
Para otros que se topan con esto
Si está usando el paquete web para construir su aplicación, usa variables de entorno para configurar raven usando el complemento de entorno
https://webpack.js.org/plugins/environment-plugin/
p.ej
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 ahora es de solo lectura, por lo que el método anterior ya no funciona.
Encontré una siguiente solución alternativa, que parece funcionar, aunque no tengo idea de por qué.
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)
}
}
Sigue siendo una solución terrible porque secuestra todos mis errores, por lo que no sé desde qué línea se lanzaron. Al menos supongo que no es tan terrible como no verlos en absoluto.
Yo lo he usado de esta manera. Parece funcionar para mi
`if (entorno.producción) {
Raven.config ('https: //
.Instalar en pc();
}
y en proveedores
proveedores: [entorno.produccion? {proporcionar: ErrorHandler, useClass: RavenErrorHandler}: [], ... `
Por favor, avíseme si estoy haciendo algo mal aquí.
Luce bien para mi. Aparentemente, el problema original ya ha sido respondido aquí, así que cerrando este. Siéntase libre de volver a abrir si aún es relevante de alguna manera.
Más fácil en '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
],
y
.config('key', {
shouldSendCallback: function () {
return environment.production;
}
})
.install();
De esta manera, tiene los mensajes localdev en su consola (de lo contrario, Sentry toma algunos) y en producción obtiene los que desea tener.
Al menos en Chrome (no estoy seguro de otros navegadores), otra forma de evitar que Raven "secuestra" la consola de desarrollo es bloquear raven.js
:
https://gist.github.com/paulirish/c307a5a585ddbcc17242
https://developer.chrome.com/devtools/docs/blackboxing
¿Y Sentry? No uso Raven, tengo Sentry y quiero deshabilitarlo en el entorno de desarrollo en mi localhost.
https://dev.to/angular/tracking-errors-in-angular-with-sentry-4oo0 - aquí está
@artuska puede proporcionar DSN vacío o usar beforeSend
para detener el transporte.
Sentry.init({
dsn: process.env.development ? '' : 'your-real-dsn'
})
o
Sentry.init({
dsn: 'your-real-dsn',
beforeSend(event) {
if (process.env.development) return null;
return event;
}
})
No creo que eso realmente desactive a Sentry. Simplemente se detiene si de enviar
datos. Aún así, las migas de pan envuelven la mayoría de los problemas que apestan
El lunes 9 de diciembre de 2019 a las 10:15 a.m. Kamil Ogórek [email protected]
escribió:
@artuska https://github.com/artuska puede proporcionar DSN vacío o
utilizar antes de enviar para detener el transporte.Sentry.init ({
dsn: process.env.development? '': 'tu-verdadero-dsn'
})o
Sentry.init ({
dsn: 'tu-dsn-real',
beforeSend (evento) {
if (process.env.development) return null;
evento de retorno;
}
})-
Estás recibiendo esto porque hiciste un comentario.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/getsentry/sentry-javascript/issues/436?email_source=notifications&email_token=AAJVX45ZEIJWZSXZSBQ5ZQLQXYECDA5CNFSM4BW42VRKYY3PNVWWK3TUL52HS4DFVDVREXHG43V2
o darse de baja
https://github.com/notifications/unsubscribe-auth/AAJVX4YBWA3R6SM63NV5JPDQXYECDANCNFSM4BW42VRA
.
@jimmykane correcto, si desea deshabilitar Sentry, simplemente llame init
condicionalmente
Comentario más útil
Tuve una solicitud similar de @benvinegar y señaló que puedes usar:
Y eso evitará que Raven informe. Cambie el estado
return
a TRUE y comenzará a informar. Al menos esto es lo que me han dicho. Planeamos usar esto más un comando de implementaciónsed
para cambiar el booleano en el momento de la implementación.