Sentry-javascript: Desative o sentinela no ambiente de desenvolvimento ao usar o plugin angular

Criado em 17 dez. 2015  ·  15Comentários  ·  Fonte: getsentry/sentry-javascript

No momento não é possível desabilitar o plugin sentry porque o módulo ngRaven falha ao carregar.

No ambiente de desenvolvimento, uso o seguinte sem fornecer o DSN
Raven.config (). Install ()

O retorno de chamada que registra o provedor raven não é chamado

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

Porque a função de instalação não chama o plugin que instala o módulo
isSetup () falhou porque o globalServer é nulo

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

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

        isRavenInstalled = true;
    }

    return Raven;
},

Comentários muito úteis

Recebi um pedido semelhante de @benvinegar e ele indicou que você pode usar:

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

E isso vai impedir Raven de reportar. Mude o status return para TRUE e ele iniciará o relatório. Pelo menos é o que me disseram. Planejamos usar isso mais um comando de implantação sed para inverter o booleano no momento da implantação.

Todos 15 comentários

Relacionado a # 414 e # 413

@Sija @odedfos - você pode comentar sobre # 414? Tipo, esse PR vai resolver esse problema?

@benvinegar parece legítimo para mim, embora eu possa imaginar um caso em que você deseja que Raven provider esteja disponível, mesmo sem chamar .config() - como definir a sinalização Raven.debug por exemplo

Recebi um pedido semelhante de @benvinegar e ele indicou que você pode usar:

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

E isso vai impedir Raven de reportar. Mude o status return para TRUE e ele iniciará o relatório. Pelo menos é o que me disseram. Planejamos usar isso mais um comando de implantação sed para inverter o booleano no momento da implantação.

Fiz algo semelhante ao acima para permitir que install () fosse bem-sucedido e para evitar fazer qualquer solicitação de http para realmente enviar os erros ( window.SERVER_FLAGS é como passo meu sentryURL do meu backend para o 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();

Isso parece estar funcionando muito bem e ainda permite que o Raven seja executado, mas simplesmente não informa. Eu realmente não gosto de ter que hackear isSetup mas foi a única maneira que pude descobrir que era minimamente invasiva para carregar ngRaven .

Para outros que tropeçam nisso

Se você estiver usando o webpack para construir seu aplicativo, use variáveis ​​de ambiente para configurar o raven usando o plug-in de ambiente

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

por exemplo

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 agora é somente leitura, portanto, o método acima não funciona mais.

Encontrei a seguinte solução alternativa, que parece funcionar, embora não tenha ideia do porquê.

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)
  }
}

Ainda é uma solução terrível porque sequestra todos os meus erros, então não sei de qual linha eles foram lançados. Pelo menos eu acho que não é tão terrível quanto não vê-los.

Eu usei dessa forma. Parece funcionar para mim

`if (environment.production) {
Raven.config ('https: //@ sentry.io /')
.instalar();
}

e em provedores
fornecedores: [ambiente.produção? {fornecer: ErrorHandler, useClass: RavenErrorHandler}: [], ... `

Por favor, deixe-me saber se eu estou fazendo algo errado aqui.

Parece bom para mim. Aparentemente, o problema original já foi respondido aqui, então fechando este. Sinta-se à vontade para reabrir se ainda for relevante de alguma forma.

Mais fácil em '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
  ],

e

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

Desta forma, você tem as mensagens do dispositivo local em seu console (senão o Sentry pega algumas) e na produção você obtém as que deseja

Pelo menos no Chrome (não tenho certeza sobre outros navegadores), outra maneira de evitar que Raven "sequestre" o console dev é colocar na caixa preta raven.js :

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

2018-05-11_12-45-12

E quanto ao Sentinela? Eu não uso o Raven, tenho o Sentry e quero desabilitá-lo no ambiente de desenvolvimento no meu host local.

https://dev.to/angular/tracking-errors-in-angular-with-sentry-4oo0 - aqui está

@artuska você pode fornecer um DSN vazio ou usar beforeSend para interromper o transporte.

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

Não acho que isso desabilite o Sentinela. Ele apenas para se de enviar
dados. Ainda assim, a migalha de pão envolve a maioria dos problemas, o que é uma merda

Na segunda-feira, 9 de dezembro de 2019 às 10:15 Kamil Ogórek [email protected]
escreveu:

@artuska https://github.com/artuska você pode fornecer DSN vazio ou
use beforeSend para interromper o transporte.

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

ou

Sentry.init ({
dsn: 'seu-real-dsn',
beforeSend (evento) {
if (process.env.development) retorna nulo;
evento de retorno;
}
})

-
Você está recebendo isso porque comentou.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/getsentry/sentry-javascript/issues/436?email_source=notifications&email_token=AAJVX45ZEIJWZSXZSBQ5ZQLQXYECDA5CNFSM4BW42VRKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEGIMY2Y#issuecomment-563137643 ,
ou cancelar
https://github.com/notifications/unsubscribe-auth/AAJVX4YBWA3R6SM63NV5JPDQXYECDANCNFSM4BW42VRA
.

@jimmykane correto, se você quiser desabilitar o Sentinela, basta chamar init condicionalmente

Esta página foi útil?
0 / 5 - 0 avaliações