obsi_error_sentry 1.0.1
obsi_error_sentry: ^1.0.1 copied to clipboard
Production Sentry error reporting exporter for the Obsi SDK.
obsi_error_sentry #
obsi_error_sentry delivers error reports created by
obsi through the Sentry Dart SDK. It maps
Obsi's vendor-neutral report model to an isolated Sentry event scope.
The obsi core remains responsible for capturing exceptions, managing
zone-local scopes, sanitizing data, deduplicating reports, sampling, rate
limiting, and correlating errors with traces.
Installation #
dart pub add obsi obsi_error_sentry sentry
import 'package:obsi/obsi.dart';
import 'package:obsi_error_sentry/obsi_error_sentry.dart';
import 'package:sentry/sentry.dart';
How it works #
exception → ErrorManager → error processors → SentryErrorExporter → Sentry
│
└─ user, tags, contexts, breadcrumbs, attachments, trace IDs
Every report uses an isolated Sentry scope. Report-specific user data, tags, or breadcrumbs do not mutate the scope of another concurrent capture.
Basic configuration #
await Sentry.init((options) {
options.dsn = sentryDsn;
options.environment = 'production';
});
final errors = ErrorManager(
resource: Resource({
'service.name': 'checkout-api',
'service.version': '1.0.0',
}),
exporter: SentryErrorExporter(closeOnShutdown: true),
);
Obsi.configure(ObsiProvider(errors: errors));
try {
await Errors.guard(runApplication);
} finally {
await Obsi.shutdown();
}
Set closeOnShutdown: true only when this Obsi installation owns the global
Sentry SDK. If another library or application layer owns Sentry, leave the
default false and close it there.
Enriching an event #
await Errors.withScope(
() async {
Errors.addBreadcrumb(ErrorBreadcrumb(
timestamp: DateTime.now(),
category: 'payment',
message: 'Authorization requested',
data: {'payment.method': 'card'},
));
try {
await authorizePayment();
} catch (error, stackTrace) {
await Errors.captureException(
error,
stackTrace: stackTrace,
reason: 'Payment provider rejected the request',
tags: {'feature': 'checkout'},
contexts: {
'payment': {'currency': 'EUR', 'retry': 0},
},
fingerprint: ['payment-provider', 'authorization'],
);
}
},
user: ErrorUser(id: 'customer-42'),
tags: {'tenant': 'acme'},
);
The exporter maps exception, stack trace, message, severity, user, fingerprint, tags, contexts, breadcrumbs, attachments, Obsi resource and instrumentation scope, and the active trace/span identifiers.
Delivery acceptance #
Sentry returns an event ID when it accepts a capture. requireEventId defaults
to true. An empty ID increments rejectedReports and throws
SentryDeliveryRejectedException.
final exporter = SentryErrorExporter(
requireEventId: true,
closeOnShutdown: false,
);
Set requireEventId: false only when intentional Sentry-side sampling should
count as a successful local export. exportedReports and rejectedReports
provide adapter-level health; Obsi's ErrorManager exposes pipeline counters.
Privacy #
User data, tags, contexts, breadcrumbs, and attachments may contain sensitive information. Configure Obsi error processors before the exporter and review application-specific fields. The default core pipeline sanitizes common secret keys, but cannot infer every domain-specific privacy rule.
Ownership and shutdown #
The exporter waits for in-flight captures during forceFlush() and
shutdown(). Shutdown is idempotent and terminal; later exports complete with
StateError. Capture failures retain their original error and stack trace.
For Flutter, initialize sentry_flutter normally and add
obsi_flutter when Flutter framework
and root-isolate failures should be captured automatically.
API inventory #
| Concept | Public API | When to use it |
|---|---|---|
| Sentry delivery | SentryErrorExporter |
Connect an Obsi ErrorManager to the Sentry Dart SDK. |
| Rejected delivery | SentryDeliveryRejectedException |
Detect an empty Sentry event ID when acceptance is required. |
| Capture injection | SentryCapture |
Supply a test double or a custom Sentry hub capture function. |
| Scope mapping | applyErrorReportToSentryScope |
Reuse Obsi-to-Sentry field mapping in an advanced custom integration. |
Only declarations exported by
package:obsi_error_sentry/obsi_error_sentry.dart are stable. See
obsi for error scopes, processors, capture
APIs, and lifecycle. Licensed under the
MIT License.