Flutter错误追踪插件simplytics_sentry的使用
Flutter错误追踪插件simplytics_sentry的使用
Simplytics 是一个简单的分析和崩溃报告抽象层。该插件添加了对 Sentry 和 GlitchTip 集成的支持。
使用
要开始在 Flutter 应用程序中使用 Simplytics 与 Sentry 或 GlitchTip,你需要初始化 Sentry 并配置 Simplytics,指定要使用的分析和错误监控服务类:
SentryFlutter.init(
(options) => options
// Sentry/GlitchTip DSN 和其他选项
..dsn = '<dsn url>'
..tracesSampleRate = 1.0
..enableAutoSessionTracking = false
..debug = true
..diagnosticLevel = SentryLevel.debug,
appRunner: () => runAppGuarded(
() async {
// 设置 Simplytics
Simplytics.setup(
crashlogService: SimplyticsCrashlogServiceGroup([
SimplyticsDebugCrashlogService(),
SimplyticsSentryCrashlogService(),
]),
);
return const MyApp();
},
// 当使用 Sentry 时,启用此设置非常重要
runAppAfterSetup: true,
onError: (error, stackTrace) {
Simplytics.crashlog.recordFatalError(error, stackTrace);
},
),
);
完整示例代码
以下是一个完整的示例,展示了如何在 Flutter 应用程序中使用 Simplytics 和 Sentry。
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
import 'package:simplytics/simplytics.dart';
import 'package:simplytics_sentry/simplytics_sentry.dart';
void main() {
// 初始化 Sentry/GlitchTip
SentryFlutter.init(
(options) => options
// Sentry/GlitchTip DSN 和其他选项
..dsn = '<dsn url>'
..tracesSampleRate = 1.0
..enableAutoSessionTracking = false
..diagnosticLevel = SentryLevel.debug,
appRunner: () => runAppGuarded(
() async {
// 设置 Simplytics
Simplytics.setup(
crashlogService: SimplyticsCrashlogServiceGroup([
SimplyticsDebugCrashlogService(true),
SimplyticsSentryCrashlogService(enabled: !kDebugMode),
]),
);
return const MyApp();
},
// 当使用 Sentry 时,启用此设置非常重要
runAppAfterSetup: true,
// 发送致命错误到 Simplytics
onError: (error, stackTrace) => Simplytics.crashlog.recordFatalError(error, stackTrace),
),
);
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Simplytics Sentry Demo',
theme: ThemeData(
primarySwatch: Colors.purple,
),
home: const DemoPage(),
);
}
}
// 主演示页面
class DemoPage extends StatelessWidget {
const DemoPage({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
OutlinedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const ErrorDemoPage()),
);
},
child: const Text('错误报告测试'),
),
],
),
),
);
}
}
// 崩溃报告演示
class ErrorDemoPage extends StatefulWidget {
const ErrorDemoPage({super.key});
[@override](/user/override)
State<ErrorDemoPage> createState() => _ErrorDemoPageState();
}
class _ErrorDemoPageState extends State<ErrorDemoPage> {
[@override](/user/override)
void initState() {
super.initState();
// 设置用户ID和自定义键值对
Simplytics.crashlog.setUserId('test_user');
Simplytics.crashlog.setCustomKey('test_key', 'test_value');
}
// 记录错误日志
void _logError() {
Simplytics.crashlog.log('Some log error');
}
// 记录错误信息
void _recordError() {
Simplytics.crashlog.recordError(
'Some error',
StackTrace.current,
information: [
SimplyticsErrorTag('code', 712234),
SimplyticsErrorProperty('region', 'local'),
],
reason: 'FakeException',
);
}
// 记录致命错误
void _recordFatalError() {
Simplytics.crashlog.recordError(
'Some error',
StackTrace.current,
reason: 'FakeException',
fatal: true,
);
}
// 抛出异常
void _throwException() {
throw Exception('Some exception');
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('错误报告测试'),
),
body: Center(
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Text('崩溃记录关闭'),
Switch(
value: Simplytics.crashlog.isEnabled,
onChanged: (value) async {
await Simplytics.crashlog.setEnabled(value);
setState(() {});
},
),
const Text('崩溃记录打开'),
],
),
const Divider(),
TextButton(
onPressed: _logError,
child: const Text('记录错误日志'),
),
TextButton(
onPressed: _recordError,
child: const Text('记录错误'),
),
TextButton(
onPressed: _recordFatalError,
child: const Text('记录致命错误'),
),
TextButton(
onPressed: _throwException,
child: const Text('抛出异常'),
),
],
),
),
),
);
}
}
更多关于Flutter错误追踪插件simplytics_sentry的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter错误追踪插件simplytics_sentry的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
simplytics_sentry
是一个用于 Flutter 的错误追踪插件,它集成了 Sentry 来捕获和报告应用程序中的错误和异常。使用这个插件可以帮助开发者更好地监控和调试应用程序中的问题。
以下是使用 simplytics_sentry
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 simplytics_sentry
的依赖。
dependencies:
flutter:
sdk: flutter
simplytics_sentry: ^1.0.0 # 使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化 Sentry
在你的 Flutter 应用程序中初始化 Sentry。通常,你可以在 main.dart
文件中进行初始化。
import 'package:flutter/material.dart';
import 'package:simplytics_sentry/simplytics_sentry.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 Sentry
await SimplyticsSentry.init(
dsn: 'YOUR_SENTRY_DSN', // 替换为你的 Sentry DSN
environment: 'production', // 设置环境
release: '1.0.0', // 设置版本号
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
3. 捕获异常
simplytics_sentry
会自动捕获未处理的异常。如果你想要手动捕获异常,可以使用 SimplyticsSentry.captureException
方法。
try {
// 可能会抛出异常的代码
} catch (e, stackTrace) {
// 捕获并报告异常
SimplyticsSentry.captureException(e, stackTrace: stackTrace);
}
4. 记录自定义事件
你还可以使用 SimplyticsSentry.captureMessage
来记录自定义事件或消息。
SimplyticsSentry.captureMessage('这是一个自定义消息');
5. 添加用户上下文
你可以为 Sentry 报告添加上下文信息,例如用户信息。
SimplyticsSentry.setUserContext(
id: '12345',
email: 'user@example.com',
username: 'johndoe',
);
6. 添加额外数据
你还可以为事件添加额外的数据。
SimplyticsSentry.captureException(
e,
stackTrace: stackTrace,
extra: {
'key': 'value',
'anotherKey': 'anotherValue',
},
);
7. 调试和测试
在开发过程中,你可以启用调试模式来查看 Sentry 的日志输出。
await SimplyticsSentry.init(
dsn: 'YOUR_SENTRY_DSN',
debug: true, // 启用调试模式
);
8. 发布
在发布应用程序之前,确保你已经正确配置了 Sentry 并且禁用了调试模式。
await SimplyticsSentry.init(
dsn: 'YOUR_SENTRY_DSN',
debug: false, // 禁用调试模式
);