Sentry-javascript: Deshabilitar centinela en el entorno de desarrollo cuando se usa el complemento angular

Creado en 17 dic. 2015  ·  15Comentarios  ·  Fuente: getsentry/sentry-javascript

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;
},

Comentario más útil

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.

Todos 15 comentarios

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: //@ sentry.io /')
.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

2018-05-11_12-45-12

¿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

¿Fue útil esta página
0 / 5 - 0 calificaciones