@sentry/browser
@sentry/node
raven-js
raven-node
_(ノードのレイヴン)_@sentry/browser": "4.4.2"
こんにちは、みんな、
上で説明したように、私はAngular6 + Ngrx6を使用しています。
私がやりたいのは、webAppがAPI呼び出しに失敗したときにSentryにエラーを送信することです。
たとえば、存在しない/abc/3
というAPIを呼び出します。
次に、クライアントは404 Not Found
エラーを受け取ります。
そして、これは私が@sentry/browser
を介してSentryに送信したいものです。
簡単なサービスを作成しました。
@Injectable({
providedIn: 'root'
})
export class SentryService {
constructor() { }
captureException(error: any) {
Sentry.captureException(error.originalError || error);
throw error;
}
}
AngularのErrorHandler
SentryErrorHandler
を作成しました
@Injectable()
export class SentryErrorHandler implements ErrorHandler {
constructor(private sentry: SentryService) {}
handleError(error: any): void {
this.sentry.captureException(error);
throw error;
}
}
このコードは、次のような通常のjsエラーを検出しますabcdefg(); // <- this function doesn't exist so it occurs an error and sent to Sentry.
しかし、上記のコードはネットワークエラーを検出しないことがわかりました。 (私が言ったように/abc/3
)
そこで、AngularのHttpInterceptor
ErrorInterceptor
を作成しました。
@Injectable()
export class ErrorInterceptor implements HttpInterceptor {
constructor(
private _injector: Injector,
private sentry: SentryService
) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req)
.pipe(
tap(event => {}, error => {
if (error) {
this.sentry.captureException(error);
}
})
);
}
}
その後、ネットワークエラーをキャッチできました。
しかし、問題は、Sentryダッシュボードに何も表示されないことです。
Chromeのネットワークタブを確認しました。 そして私はメッセージを見つけることができました:
「キーでキャプチャされたエラー以外の例外:エラー、ヘッダー、メッセージ、名前、OK…」
したがって、@ sentry / browserはこれがエラーであるとは考えていないと思います。
私はまた、 Non-Error exception captured with keys: error, headers, message, name, ok…
について話していることを知りました
これが私の質問です。
ありがとう!
@Taewa Angularによってスローされたエラーオブジェクトは、 SentryEvent
と同じ形式ではありません。
1つの方法は、エラー情報の一部とともにcaptureMessage(message: string)
を使用することです。 それは私が選んだより簡単な方法でもあります: https ://github.com/pascaliske/ngx-sentry/blob/master/projects/ngx-sentry/src/lib/sentry.interceptor.ts
もう1つの方法は、Sentryイベントオブジェクトを自分で作成し、 captureEvent(event: SentryEvent)
メソッドを使用してSentryに送信することです。
お役に立てれば。 🙂
ありがとう@pascaliske
私はあなたが言ったcaptureMessage(message: string)
を使って実際に解決しました。
それは将来の訪問者のために役立つでしょう:)
解決されたようですので、この問題を閉じます。
最も参考になるコメント
@Taewa Angularによってスローされたエラーオブジェクトは、
SentryEvent
と同じ形式ではありません。1つの方法は、エラー情報の一部とともに
captureMessage(message: string)
を使用することです。 それは私が選んだより簡単な方法でもあります: https ://github.com/pascaliske/ngx-sentry/blob/master/projects/ngx-sentry/src/lib/sentry.interceptor.tsもう1つの方法は、Sentryイベントオブジェクトを自分で作成し、
captureEvent(event: SentryEvent)
メソッドを使用してSentryに送信することです。お役に立てれば。 🙂