Sentry-javascript: Angularプラグインを使用する場合、開発環境で歩哨を無効にする

作成日 2015年12月17日  ·  15コメント  ·  ソース: getsentry/sentry-javascript

現時点では、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;
},

最も参考になるコメント

@benvinegarから同様のリクエストが

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

そして、それはレイヴンが報告するのを止めます。 returnステータスをTRUEに切り替えると、レポートが開始されます。 少なくともこれは私が言われたことです。 これに加えて、デプロイメントsedコマンドを使用して、デプロイメント時にブール値を反転する予定です。

全てのコメント15件

#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://@ sentry.io /')
。インストール();
}

とプロバイダーで
プロバイダー:[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

2018-05-11_12-45-12

そして、セントリーはどうですか? 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呼び出してください。

このページは役に立ちましたか?
0 / 5 - 0 評価