From c0623d1c3c64adac0b4d2eba3b24078394c06192 Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Wed, 22 Apr 2020 01:10:36 +0200 Subject: [PATCH] Sentry: Add error breadcrumbs This way we will have some context as to why an error happened. --- lib/analytics.dart | 6 +++++- lib/app.dart | 1 - lib/error_reporting.dart | 37 ++++++++++++++++++++++++------------- 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/lib/analytics.dart b/lib/analytics.dart index 8a29495b..e34d0db0 100644 --- a/lib/analytics.dart +++ b/lib/analytics.dart @@ -1,6 +1,7 @@ import 'package:flutter/foundation.dart'; import 'package:gitjournal/app.dart'; +import 'package:gitjournal/error_reporting.dart'; import 'package:firebase_analytics/firebase_analytics.dart'; Analytics getAnalytics() { @@ -9,15 +10,18 @@ Analytics getAnalytics() { class Analytics { FirebaseAnalytics firebase; + bool enabled = false; Future logEvent({ @required String name, Map parameters, }) async { - return firebase.logEvent(name: name, parameters: parameters); + await firebase.logEvent(name: name, parameters: parameters); + captureErrorBreadcrumb(name: name, parameters: parameters); } Future setAnalyticsCollectionEnabled(bool enabled) async { + this.enabled = enabled; return firebase.setAnalyticsCollectionEnabled(enabled); } } diff --git a/lib/app.dart b/lib/app.dart index cdd871f9..91441001 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -1,7 +1,6 @@ import 'dart:io'; import 'package:device_info/device_info.dart'; -import 'package:firebase_analytics/firebase_analytics.dart'; import 'package:firebase_analytics/observer.dart'; import 'package:flutter/material.dart'; import 'package:gitjournal/analytics.dart'; diff --git a/lib/error_reporting.dart b/lib/error_reporting.dart index ca057b8d..f02235e0 100644 --- a/lib/error_reporting.dart +++ b/lib/error_reporting.dart @@ -93,15 +93,7 @@ Future initCrashlytics() async { Future reportError(Object error, StackTrace stackTrace) async { if (reportCrashes) { - try { - final sentry = await getSentryClient(); - sentry.captureException( - exception: error, - stackTrace: stackTrace, - ); - } catch (e) { - print("Failed to report with Sentry: $e"); - } + captureSentryException(error, stackTrace); } print("Uncaught Exception: $error"); @@ -113,15 +105,34 @@ Future logException(Exception e, StackTrace stackTrace) async { return; } + await captureSentryException(e, stackTrace); + return FlutterCrashlytics().logException(e, stackTrace); +} + +List breadcrumbs = []; + +void captureErrorBreadcrumb({ + @required String name, + Map parameters, +}) { + var b = Breadcrumb(name, DateTime.now(), data: parameters); + breadcrumbs.add(b); +} + +Future captureSentryException( + Exception exception, + StackTrace stackTrace, +) async { try { final sentry = await getSentryClient(); - await sentry.captureException( - exception: e, + final Event event = Event( + exception: exception, stackTrace: stackTrace, + breadcrumbs: breadcrumbs, ); + + return sentry.capture(event: event); } catch (e) { print("Failed to report with Sentry: $e"); } - - return FlutterCrashlytics().logException(e, stackTrace); }