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;
},
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: //
.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
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
Comentários muito úteis
Recebi um pedido semelhante de @benvinegar e ele indicou que você pode usar:
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çãosed
para inverter o booleano no momento da implantação.