Flutter错误追踪插件sentry_dart_plugin的使用

发布于 1周前 作者 wuwangju 来自 Flutter

Flutter错误追踪插件sentry_dart_plugin的使用

Sentry Dart Plugin 简介

Sentry Dart Plugin 是一个用于Flutter项目的Dart构建插件,它能够为Android、iOS/macOS和Web上传调试符号(debug symbols)和源映射(source maps)到Sentry。通过sentry-cli,你可以更方便地进行错误追踪和性能监控。

安装

在你的pubspec.yaml文件中添加sentry_dart_plugin作为开发依赖项:

dev_dependencies:
  sentry_dart_plugin: ^2.0.0

构建应用

为了确保生成了必要的debug symbols和source maps,在执行sentry_dart_plugin之前,你需要先运行以下命令之一来构建你的应用:

  • flutter build apk
  • flutter build iosmacos
  • flutter build web

运行插件

使用以下命令运行插件:

dart run sentry_dart_plugin

配置(可选)

此工具提供了默认配置,但你也可以根据需要自定义配置。配置可以放在pubspec.yaml文件中,或者创建一个sentry.properties文件,甚至可以通过环境变量设置。以下是pubspec.yaml中的示例配置:

sentry:
  upload_debug_symbols: true
  upload_source_maps: false
  upload_sources: false
  project: your_project_name
  org: your_org_slug
  auth_token: your_auth_token
  url: https://your_sentry_url/
  wait_for_processing: false
  log_level: error # 可选值:trace, debug, info, warn, error
  release: app-release@1.0.0
  dist: 1
  build_path: build
  web_build_path: web
  symbols_path: .
  commits: auto
  ignore_missing: true

你还可以通过命令行参数覆盖或扩展基于文件的配置:

dart run sentry_dart_plugin --sentry-define=release=app-internal-test@0.0.1

对于Web应用,如果你的应用不是部署在URL根目录下,则需要配置前缀并更新堆栈帧以包含该前缀:

sentry:
  upload_source_maps: true
  prefix: ~/your_prefix/

并且在构建时指定前缀路径和--source-maps选项:

flutter build web --base-href=/your_prefix/ --source-maps

同时,修改Dart代码中的beforeSend钩子以更新堆栈帧的绝对路径:

options.beforeSend = (event, hint) async {
  final exceptions = event.exceptions?.map((exception) {
    final stackTrace = exception.stackTrace;
    if (stackTrace != null) {
      final frames = stackTrace.frames.map((frame) {
        const baseUrl = 'https://your-domain.com/';
        final modifiedAbsPath = frame.absPath?.replaceFirst(
          baseUrl,
          '${baseUrl}your_prefix/',
        );
        return frame.copyWith(absPath: modifiedAbsPath);
      }).toList();
      return exception.copyWith(
        stackTrace: SentryStackTrace(frames: frames),
      );
    }
    return exception;
  }).toList();
  return event.copyWith(exceptions: exceptions ?? []);
};

示例项目配置

这里提供了一个完整的pubspec.yaml示例,展示了如何配置sentry_dart_plugin

name: sentry_example
description: Demonstrates how to use the sentry_dart_plugin plugin.
version: 0.1.2+3

publish_to: 'none'

environment:
  sdk: '>=2.12.0 <3.0.0'
  flutter: '>=2.0.0'

dependencies:
  flutter:
    sdk: flutter

dev_dependencies:
  sentry_dart_plugin: ^1.0.0-beta.1

sentry:
  upload_sources: true
  upload_source_maps: true
  project: sentry-flutter
  org: sentry-sdks
  wait_for_processing: true
  log_level: error
  release: app-release@1.0.0

通过以上步骤,你可以轻松集成sentry_dart_plugin到你的Flutter项目中,并开始利用Sentry的强大功能来进行错误跟踪和性能优化。


更多关于Flutter错误追踪插件sentry_dart_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter错误追踪插件sentry_dart_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter项目中集成和使用 sentry_dart_plugin 进行错误追踪,可以通过以下步骤进行。以下是一个基本的代码案例,展示了如何配置和使用 Sentry。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 sentry_flutter 依赖:

dependencies:
  flutter:
    sdk: flutter
  sentry_flutter: ^6.0.0  # 请检查最新版本号

然后运行 flutter pub get 来安装依赖。

2. 初始化 Sentry

在你的 Flutter 应用的入口文件(通常是 main.dart)中,初始化 Sentry。

import 'package:flutter/material.dart';
import 'package:sentry_flutter/sentry_flutter.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 配置 Sentry
  await SentryFlutter.init(
    (options) {
      options.dsn = 'https://your-dsn-here@o123456.ingest.sentry.io/1234567';  // 替换为你的 DSN
      // 其他可选配置
      options.enableInDebugMode = true; // 在开发模式下启用 Sentry
      options.debug = true; // 打印更多调试信息
    },
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Sentry Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 模拟一个错误
            throw Exception('This is a test error!');
          },
          child: Text('Throw Error'),
        ),
      ),
    );
  }
}

3. 捕获异常

你可以使用 Sentry.captureException 方法手动捕获异常,或者在全局范围内捕获未处理的异常。

手动捕获异常

void someFunction() {
  try {
    // 可能抛出异常的代码
  } catch (e, stackTrace) {
    Sentry.captureException(e, stackTrace: stackTrace);
  }
}

全局捕获未处理的异常

为了捕获整个应用中的未处理异常,你可以使用 Flutter 的 FlutterError.onErrorZone

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 配置 Sentry
  await SentryFlutter.init(
    (options) {
      options.dsn = 'https://your-dsn-here@o123456.ingest.sentry.io/1234567';  // 替换为你的 DSN
      options.enableInDebugMode = true; // 在开发模式下启用 Sentry
      options.debug = true; // 打印更多调试信息
    },
  );

  // 全局捕获 Flutter 错误
  FlutterError.onError = (FlutterErrorDetails details) {
    Sentry.captureException(
      details.exception,
      stackTrace: details.stack,
    );
  };

  // 全局捕获 Dart Zone 错误
  runZonedGuarded(
    () {
      runApp(MyApp());
    },
    (error, stackTrace) {
      Sentry.captureException(error, stackTrace: stackTrace);
    },
  );
}

4. 测试和验证

运行你的 Flutter 应用,触发一个错误(例如点击按钮触发异常),然后检查 Sentry 仪表板,确保错误被正确捕获和记录。

注意

  • 确保你的 DSN 是正确的,并且你有权限访问 Sentry 项目。
  • 在生产环境中,通常不会启用 enableInDebugModedebug 选项。
  • 根据你的需求,你可能需要配置更多 Sentry 选项,例如面包屑(breadcrumbs)、用户上下文(user context)等。

通过以上步骤,你应该能够在 Flutter 应用中成功集成和使用 sentry_dart_plugin 进行错误追踪。

回到顶部