report method
Future<void>
report(
- Object error,
- StackTrace stackTrace, {
- String category = 'app.error',
- bool fatal = false,
- String? message,
- Map<
String, String> ? metadata, - bool present = false,
- MeshErrorSeverity severity = MeshErrorSeverity.error,
Implementation
Future<void> report(
Object error,
StackTrace stackTrace, {
String category = 'app.error',
bool fatal = false,
String? message,
Map<String, String>? metadata,
bool present = false,
MeshErrorSeverity severity = MeshErrorSeverity.error,
}) async {
if (_isDuplicate(error, stackTrace, category)) {
return;
}
final entry = <String, Object?>{
'level': 'ERROR',
'category': category,
'fatal': fatal,
'error': error.toString(),
'message': message,
'stackTrace': stackTrace.toString(),
'timestamp': DateTime.now().toIso8601String(),
if (metadata != null && metadata.isNotEmpty) 'metadata': metadata,
};
debugPrint(jsonEncode(entry));
if (present) {
_notices.add(
MeshErrorNotice(
category: category,
message: message ?? _resolveUserMessage(error, stackTrace, category),
severity: fatal ? MeshErrorSeverity.fatal : severity,
timestamp: DateTime.now(),
error: error,
stackTrace: stackTrace,
),
);
}
if (!_remoteReportingEnabled) {
return;
}
try {
await Proxy.mpi<DataHouse>().write(
Document(
metadata: <String, String>{
'kind': 'flutter_error',
'category': category,
'fatal': fatal.toString(),
if (metadata != null) ...metadata,
},
content: jsonEncode(entry),
timestamp: DateTime.now().millisecondsSinceEpoch,
),
);
} catch (reportingError, reportingStackTrace) {
debugPrint(
jsonEncode(<String, Object?>{
'level': 'ERROR',
'category': 'app.error_report_failed',
'error': reportingError.toString(),
'stackTrace': reportingStackTrace.toString(),
'timestamp': DateTime.now().toIso8601String(),
}),
);
}
}