error method

  1. @override
Future<void> error(
  1. LogEntry entry
)
override

Records an error or a structured event with an error to Firebase Crashlytics.

entry - The complete log entry containing error message, level, timestamp, context, stackTrace, and event.

Implementation

@override
Future<void> error(LogEntry entry) async {
  try {
    if (shouldLog(event: entry.event)) {
      // Merge context from entry.context and event.parameters
      final contextInfo = <String, dynamic>{};
      if (entry.context != null) {
        contextInfo.addAll(entry.context!);
      }
      if (entry.event?.parameters != null) {
        contextInfo.addAll(entry.event!.parameters!);
      }

      // Set custom keys from context
      if (contextInfo.isNotEmpty) {
        contextInfo.forEach((key, value) {
          FirebaseCrashlytics.instance.setCustomKey(key, value.toString());
        });
      }

      if (entry.event != null && entry.event is FirebaseCrashlyticsLogEvent) {
        final crashlyticsEvent = entry.event as FirebaseCrashlyticsLogEvent;
        FirebaseCrashlytics.instance.recordError(
          entry.message,
          entry.stackTrace,
          reason: crashlyticsEvent.eventMessage,
        );
      } else {
        FirebaseCrashlytics.instance.recordError(
          entry.message,
          entry.stackTrace,
        );
      }
    }
  } catch (e, stack) {
    developer.log(
      'Error during error handling in Firebase Crashlytics Strategy',
      name: 'FirebaseCrashlyticsLogStrategy',
      error: e,
      stackTrace: stack,
    );
  }
}