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: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<void> logEvent({
@required String name,
Map<String, dynamic> parameters,
}) 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 {
this.enabled = enabled;
return firebase.setAnalyticsCollectionEnabled(enabled);
}
}

View File

@ -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';

View File

@ -93,15 +93,7 @@ Future<void> initCrashlytics() async {
Future<void> 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<void> logException(Exception e, StackTrace stackTrace) async {
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 {
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);
}