# 错误日志收集
# 集成sentry日志收集
注册sentry,官方地址:https://sentry.io/ (opens new window),注册完成之后,就可以创建Flutter的项目了:
# 安装依赖
dependencies:
sentry_flutter: ^6.2.2
使用flutter pub get
安装依赖。
# 配置sentry
import 'package:flutter/widgets.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
Future<void> main() async {
await SentryFlutter.init(
(options) {
options.dsn = 'https://f8ec7ac644ac4d749ee18ac058bed41b@o1050376.ingest.sentry.io/6173778';
// Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.
// We recommend adjusting this value in production.
options.tracesSampleRate = 1.0;
},
// 可以修改这个函数,加入初始化应用,比如getIt
appRunner: () => runApp(MyApp()),
);
// or define SENTRY_DSN via Dart environment variable (--dart-define)
}
收集错误:
import 'package:sentry/sentry.dart';
try {
aMethodThatMightFail();
} catch (exception, stackTrace) {
await Sentry.captureException(
exception,
stackTrace: stackTrace,
);
}
// 这个可以放到dio_error_interceptor中
# 集成Bugly日志收集
在Bugly官方https://bugly.qq.com/v2/ (opens new window)注册账号。
新增产品(iOS与Android):
选择平台与分类,创建完成。
点选产品,选择设置:
# 安装依赖
dependencies:
flutter_bugly: ^0.4.3
使用flutter pub get
安装依赖。
# 配置Bugly
调整main.dart
文件
void main() async {
// Bugly
FlutterBugly.postCatchedException(
() async {
await GetStorage.init();
setupGetIt();
// ..
NotificationsUtils notificationsUtils = getIt<NotificationsUtils>();
// 请求消息权限
Timer(Duration(seconds: 0), () async {
await notificationsUtils.requestIOSPermissions();
await notificationsUtils.initNotifications();
});
runApp(MyApp());
},
// 这里特别说明一下,如果开发模式没有收到错误日志,是因为没有设置debugUpload
// debugUpload: true,
);
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
void initState() {
super.initState();
// 在这里初始化
FlutterBugly.init(androidAppId: "b3ca88f6d5", iOSAppId: "7b10e672ce");
}
// ...
调整dio的error拦截器:
class ErrorInterceptor extends Interceptor {
ErrorInterceptor();
void onError(DioError err, ErrorInterceptorHandler handler) {
// print('onError: $err');
// 401 -> refreshToken
HttpException httpException = parseException(err);
// 4xx 5xx -> parseException -> 日志 -> 本地数据库&缓存
// 发送错误日志的请求
FlutterBugly.uploadException(
message: err.message, detail: err.stackTrace.toString());
handler.resolve(Response(
requestOptions: err.requestOptions,
statusCode: httpException.code,
data: {
'code': httpException.code,
'message': httpException.message,
}));
// super.onError(err, handler);
}
}
bugly错误:
← 配置应用图标与启动图 移动端打包 →