Sentry: Add error breadcrumbs

This way we will have some context as to why an error happened.
This commit is contained in:
Vishesh Handa
2020-04-22 01:10:36 +02:00
parent d511dab346
commit c0623d1c3c
3 changed files with 29 additions and 15 deletions

View File

@ -1,6 +1,7 @@
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:gitjournal/app.dart'; import 'package:gitjournal/app.dart';
import 'package:gitjournal/error_reporting.dart';
import 'package:firebase_analytics/firebase_analytics.dart'; import 'package:firebase_analytics/firebase_analytics.dart';
Analytics getAnalytics() { Analytics getAnalytics() {
@ -9,15 +10,18 @@ Analytics getAnalytics() {
class Analytics { class Analytics {
FirebaseAnalytics firebase; FirebaseAnalytics firebase;
bool enabled = false;
Future<void> logEvent({ Future<void> logEvent({
@required String name, @required String name,
Map<String, dynamic> parameters, Map<String, dynamic> parameters,
}) async { }) async {
return firebase.logEvent(name: name, parameters: parameters); await firebase.logEvent(name: name, parameters: parameters);
captureErrorBreadcrumb(name: name, parameters: parameters);
} }
Future<void> setAnalyticsCollectionEnabled(bool enabled) async { Future<void> setAnalyticsCollectionEnabled(bool enabled) async {
this.enabled = enabled;
return firebase.setAnalyticsCollectionEnabled(enabled); return firebase.setAnalyticsCollectionEnabled(enabled);
} }
} }

View File

@ -1,7 +1,6 @@
import 'dart:io'; import 'dart:io';
import 'package:device_info/device_info.dart'; import 'package:device_info/device_info.dart';
import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:firebase_analytics/observer.dart'; import 'package:firebase_analytics/observer.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gitjournal/analytics.dart'; import 'package:gitjournal/analytics.dart';

View File

@ -93,15 +93,7 @@ Future<void> initCrashlytics() async {
Future<void> reportError(Object error, StackTrace stackTrace) async { Future<void> reportError(Object error, StackTrace stackTrace) async {
if (reportCrashes) { if (reportCrashes) {
try { captureSentryException(error, stackTrace);
final sentry = await getSentryClient();
sentry.captureException(
exception: error,
stackTrace: stackTrace,
);
} catch (e) {
print("Failed to report with Sentry: $e");
}
} }
print("Uncaught Exception: $error"); print("Uncaught Exception: $error");
@ -113,15 +105,34 @@ Future<void> logException(Exception e, StackTrace stackTrace) async {
return; return;
} }
await captureSentryException(e, stackTrace);
return FlutterCrashlytics().logException(e, stackTrace);
}
List<Breadcrumb> breadcrumbs = [];
void captureErrorBreadcrumb({
@required String name,
Map<String, dynamic> parameters,
}) {
var b = Breadcrumb(name, DateTime.now(), data: parameters);
breadcrumbs.add(b);
}
Future<void> captureSentryException(
Exception exception,
StackTrace stackTrace,
) async {
try { try {
final sentry = await getSentryClient(); final sentry = await getSentryClient();
await sentry.captureException( final Event event = Event(
exception: e, exception: exception,
stackTrace: stackTrace, stackTrace: stackTrace,
breadcrumbs: breadcrumbs,
); );
return sentry.capture(event: event);
} catch (e) { } catch (e) {
print("Failed to report with Sentry: $e"); print("Failed to report with Sentry: $e");
} }
return FlutterCrashlytics().logException(e, stackTrace);
} }