Logging Integration

Learn more about the Sentry Logging integration for the Dart SDK.

This integration connects Sentry with the popular Dart logging package, providing the following capabilities:

  • If enableLogs is set to true, Sentry will send your log messages as Sentry Structured Logs (new in 9.5.0)
  • Captures breadcrumbs from your log calls
  • Converts error-level logs into Sentry error events
  • Works with your existing logging code

To add the Logging integration, add the sentry_logging dependency.

pubspec.yaml
Copied
dependencies:
  sentry: ^9.14.0
  sentry_logging: ^9.14.0
  logging: ^1.0.2

Add the LoggingIntegration to your Sentry.init call:

Copied
import 'package:sentry_logging/sentry_logging.dart';
import 'package:sentry/sentry.dart';

Future<void> main() async {
  await Sentry.init(
    (options) {
      options.dsn = '___PUBLIC_DSN___';
      options.addIntegration(LoggingIntegration());
      // If you want to enable sending structured logs, set `enableLogs` to `true`
      options.enableLogs = true;
    },
    appRunner: initApp, // Init your App.
  );
}

ParameterDefaultDescription
minBreadcrumbLevelLevel.INFOMinimum level for creating breadcrumbs
minEventLevelLevel.SEVEREMinimum level for creating error events
minSentryLogLevelLevel.INFOMinimum level for sending structured logs (requires enableLogs to be true)

You can customize which log levels trigger different Sentry features:

Copied
await Sentry.init(
  (options) {
    options.dsn = '___PUBLIC_DSN___';
    options.addIntegration(LoggingIntegration(
      minBreadcrumbLevel: Level.INFO,    // Breadcrumbs for INFO and above
      minEventLevel: Level.SEVERE,       // Error events for SEVERE and above  
      minSentryLogLevel: Level.INFO,     // Structured logs for INFO and above
    ));
  },
  appRunner: initApp,
);

Add the following snippet to your app and execute it to verify that Sentry is capturing your logs:

Copied
import 'package:logging/logging.dart';

void testLogging() {
  final log = Logger('MyAwesomeLogger');

  // This creates a breadcrumb AND a structured log (Level.INFO >= defaults)
  log.info('User logged in successfully');
  
  // This creates a breadcrumb AND a structured log (Level.WARNING >= defaults)  
  log.warning('Rate limit approaching');

  try {
    throw StateError('Something went wrong');
  } catch (error, stackTrace) {
    // This creates a breadcrumb, structured log, AND error event (Level.SEVERE >= all defaults)
    log.severe('Critical error occurred', error, stackTrace);
  }
}

  • Breadcrumbs: All three log calls will appear as breadcrumbs on the error event
  • Error Event: The severe log creates a full error event with stack trace
  • Structured Logs: (if enableLogs is true) Navigate to Logs in your Sentry project to see all three entries as searchable structured logs

The Dart logging package only includes a stack trace in a LogRecord if one is explicitly provided. When no stack trace is available, Sentry falls back to calling StackTrace.current internally, which points to Sentry's own internals rather than the actual call site. This means error events may show inaccurate stack traces unless you take one of the following approaches.

Configure the logging package to automatically capture a stack trace at the call site for specific log levels:

Copied
import 'package:logging/logging.dart';

// Automatically captures stack traces for SEVERE and above
recordStackTraceAtLevel = Level.SEVERE;

final log = Logger('MyLogger');

// The logging framework will now call StackTrace.current at this call site
log.severe('Something went wrong');

When catching exceptions, pass both the error and the stack trace directly:

Copied
final log = Logger('MyLogger');

try {
  // code that may throw
} catch (error, stackTrace) {
  log.severe('Something went wrong', error, stackTrace);
}

This gives Sentry the most accurate stack trace since it's captured at the point where the exception occurred.

Was this helpful?
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").