現時点では、ngRavenモジュールの読み込みに失敗するため、歩哨プラグインを無効にすることはできません。
開発環境では、DSNを提供せずに以下を使用します
Raven.config()。install()
レイヴンプロバイダーを登録するコールバックは呼び出されません
Raven.addPlugin(function () {
angular.module('ngRaven', [])
.provider('Raven', RavenProvider)
.config(['$provide', ExceptionHandlerProvider]);
});
インストール関数はモジュールをインストールするプラグインを呼び出さないため
globalServerがnullであるため、isSetup()が失敗しました
install: function() {
if (isSetup() && !isRavenInstalled) {
TraceKit.report.subscribe(handleStackInfo);
// Install all of the plugins
each(plugins, function(_, plugin) {
plugin();
});
isRavenInstalled = true;
}
return Raven;
},
#414および#413に関連
@Sija @odedfos –#414についてコメントできますか? 同様に、そのPRはこの問題に対処しますか?
@benvinegarは私には正当なようですが、たとえばRaven.debug
フラグを設定するなど、 .config()
を呼び出さなくても、 Raven
プロバイダーを利用できるようにしたい場合を想像できます。
@benvinegarから同様のリクエストが
Raven.config('your dsn', {
shouldSendCallback: function () {
return false;
}
}).install();
そして、それはレイヴンが報告するのを止めます。 return
ステータスをTRUEに切り替えると、レポートが開始されます。 少なくともこれは私が言われたことです。 これに加えて、デプロイメントsed
コマンドを使用して、デプロイメント時にブール値を反転する予定です。
install()を成功させ、実際にエラーを送信するためのhttpリクエストを行わないようにするために、上記と同様のことを行いました( window.SERVER_FLAGS
は、sentryURLをバックエンドからフロントエンドに渡す方法です)。
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();
これはかなりうまく機能しているようで、それでもRavenを実行できますが、単にレポートされません。 isSetup
をハックするのは本当に嫌いですが、 ngRaven
ロードするのに最小限の侵襲であることがわかった唯一の方法です。
これにつまずいた他の人のために
webpackを使用してアプリケーションをビルドしている場合は、環境変数を使用して、環境プラグインを使用してravenを構成します。
https://webpack.js.org/plugins/environment-plugin/
例えば
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は読み取り専用になっているため、上記のメソッドは機能しなくなりました。
理由はわかりませんが、次の回避策が見つかりました。これはうまくいくようです。
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)
}
}
それは私のすべてのエラーをハイジャックするので、それはまだひどい解決策です、それで私はそれらがどの行から投げられたかわかりません。 少なくとも、まったく見ないほどひどいことではないと思います。
私はこのように使用しました。 それは私のために働いているようです
`if(environment.production){
Raven.config( 'https://
。インストール();
}
とプロバイダーで
プロバイダー:[environment.production? {提供:ErrorHandler、useClass:RavenErrorHandler}:[]、... `
ここで何か問題があれば教えてください。
私には元気そうだ。 どうやら、元の問題はすでにここで回答されているので、これを閉じます。 それでも何らかの形で関連性がある場合は、自由に再開してください。
'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
],
と
.config('key', {
shouldSendCallback: function () {
return environment.production;
}
})
.install();
このようにして、コンソールにlocaldevメッセージがあり(そうでない場合はSentryがいくつかを取得します)、本番環境で必要なメッセージを取得します
少なくともChromeでは(他のブラウザについてはよくわかりませんが)、Ravenが開発コンソールを「ハイジャック」するのを防ぐ別の方法はraven.js
をブラックボックス化することです:
https://gist.github.com/paulirish/c307a5a585ddbcc17242
https://developer.chrome.com/devtools/docs/blackboxing
そして、セントリーはどうですか? Ravenを使用していません。Sentryを使用していますが、ローカルホストの開発環境でRavenを無効にしたいです。
https://dev.to/angular/tracking-errors-in-angular-with-sentry-4oo0 —ここにあります
@artuskaは、空のDSNを提供するか、 beforeSend
を使用してトランスポートを停止できます。
Sentry.init({
dsn: process.env.development ? '' : 'your-real-dsn'
})
また
Sentry.init({
dsn: 'your-real-dsn',
beforeSend(event) {
if (process.env.development) return null;
return event;
}
})
私はそれが実際にセントリーを無効にするとは思わない。 送信しないと停止します
データ。 それでも、パンくずリストは、吸うほとんどの問題をラップします
10:15カミルOgórekで月、2019年12月9日には[email protected]
書きました:
@artuska https://github.com/artuska空のDSNを提供するか、
beforeSendを使用して、トランスポートを停止します。Sentry.init({
dsn:process.env.development? '': 'your-real-dsn'
})また
Sentry.init({
dsn: 'your-real-dsn'、
beforeSend(event){
if(process.env.development)がnullを返す;
リターンイベント;
}
})—
あなたがコメントしたのであなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/getsentry/sentry-javascript/issues/436?email_source=notifications&email_token=AAJVX45ZEIJWZSXZSBQ5ZQLQXYECDA5CNFSM4BW42VRKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN
または購読を解除する
https://github.com/notifications/unsubscribe-auth/AAJVX4YBWA3R6SM63NV5JPDQXYECDANCNFSM4BW42VRA
。
@jimmykane正解ですinit
呼び出してください。
最も参考になるコメント
@benvinegarから同様のリクエストが
そして、それはレイヴンが報告するのを止めます。
return
ステータスをTRUEに切り替えると、レポートが開始されます。 少なくともこれは私が言われたことです。 これに加えて、デプロイメントsed
コマンドを使用して、デプロイメント時にブール値を反転する予定です。