Flutter远程日志记录插件flutter_feature_remote_logging的使用
Flutter远程日志记录插件flutter_feature_remote_logging
的使用
Description
flutter_feature_remote_logging
是一个用于从远程记录设备日志的库。
日志记录平台
Google Cloud Logging
使用 Google Cloud Logging 平台进行远程日志记录。
构造函数
参数 | 类型 | 描述 |
---|---|---|
serviceAccount |
Map<String, dynamic> |
从 Google Cloud 获取的 Secret Key。 |
env |
String |
用于分类日志的环境标识。 |
初始化方法
调用此函数在创建构造函数后初始化远程日志服务。
远程日志写入
将日志写入到指定的远程日志平台。
参数 | 类型 | 描述 |
---|---|---|
level |
Level |
用于标识日志的级别。 |
message |
String |
日志消息。 |
labels |
Map<String, String> |
日志的嵌套值。 |
添加默认标签
为日志添加默认标签值。
参数 | 类型 | 描述 |
---|---|---|
labels |
Map<String, String> |
想要设置为日志默认值的嵌套值。 |
移除默认标签
从默认标签中移除标签。
参数 | 类型 | 描述 |
---|---|---|
labels |
List |
想要从默认标签中移除的标签键列表。 |
Betterstack
使用 Betterstack 平台进行远程日志记录。
构造函数
参数 | 类型 | 描述 |
---|---|---|
sourceToken |
String |
通过 API 发送日志的访问令牌。 |
初始化方法
调用此函数在创建构造函数后初始化远程日志服务。
远程日志写入
将日志写入到指定的远程日志平台。
参数 | 类型 | 描述 |
---|---|---|
level |
Level |
用于标识日志的级别。 |
message |
String |
日志消息。 |
labels |
Map<String, String> |
日志的嵌套值。 |
添加默认标签
为日志添加默认标签值。
参数 | 类型 | 描述 |
---|---|---|
labels |
Map<String, String> |
想要设置为日志默认值的嵌套值。 |
移除默认标签
从默认标签中移除标签。
参数 | 类型 | 描述 |
---|---|---|
labels |
List |
想要从默认标签中移除的标签键列表。 |
示例代码
以下是一个完整的示例代码,展示如何使用 flutter_feature_remote_logging
插件。
import 'dart:convert';
import 'dart:developer';
import 'dart:io';
import 'package:example/data/dto/model/feature_model.dart';
import 'package:example/presentation/widget/feature_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_feature_remote_logging/flutter_feature_remote_logging.dart';
import 'package:logger/logger.dart';
late GoogleCloudLoggingServiceImpl googleServiceImpl;
late FeatureBetterStackRemoteLoggingServiceImpl betterstackServiceImpl;
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
// 初始化 Google Cloud Logging
try {
DefaultAssetBundle.of(context).loadString('assets/example-learn-purpose-4dd93f634791.json').then((value) {
final serviceAccount = json.decode(value) as Map<String, dynamic>;
log("service-account: $serviceAccount");
googleServiceImpl = GoogleCloudLoggingServiceImpl(
serviceAccount: serviceAccount,
env: "dev",
);
googleServiceImpl.init();
});
} catch (e) {
log("failed init google service: $e");
}
// 初始化 Betterstack
try {
dotenv.load(fileName: '.env').then((value) {
final sourceToken = dotenv.env['BETTERSTACK_SOURCE_TOKEN'];
if (sourceToken == null) throw Exception('source token missing');
betterstackServiceImpl = FeatureBetterStackRemoteLoggingServiceImpl(sourceToken: sourceToken);
betterstackServiceImpl.init();
});
} catch (e) {
log("failed init betterstack: $e");
}
Future.delayed(const Duration(seconds: 3), () {
FeatureRemoteLogger.addLogListener((event) {
googleServiceImpl.writeLog(level: event.level, message: event.message, labels: event.labels);
betterstackServiceImpl.writeLog(level: event.level, message: event.message, labels: event.labels);
});
});
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Remote Logging',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Remote Logging Example'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<FeatureModel> features = [
FeatureModel(
title: 'Log something',
desc: 'Log something',
key: 'LOG_SOMETHING',
),
FeatureModel(
title: 'Google Cloud Add Default Label',
desc: 'Google Cloud Add Default Label',
key: 'GOOGLE_CLOUD_ADD_DEFAULT_LABEL',
),
FeatureModel(
title: 'Betterstack Add Default Label',
desc: 'Betterstack Add Default Label',
key: 'BETTERSTACK_ADD_DEFAULT_LABEL',
),
];
[@override](/user/override)
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
Future.delayed(Duration(seconds: 5), () {
FeatureRemoteLogger().log(Level.info, "start app");
});
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Remote Logger')),
body: ListView.builder(
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
itemCount: features.length,
itemBuilder: (_, index) {
final feature = features[index];
return GestureDetector(
onTap: () async {
switch (feature.key) {
case "LOG_SOMETHING":
FeatureRemoteLogger().log(
Level.info,
"fadlurahmanfdev log something",
);
break;
case "GOOGLE_CLOUD_ADD_DEFAULT_LABEL":
googleServiceImpl.addLabels(labels: {
'platform': Platform.operatingSystem,
});
break;
case "BETTERSTACK_ADD_DEFAULT_LABEL":
betterstackServiceImpl.addLabels(labels: {
'platform': Platform.operatingSystem,
});
break;
}
},
child: ItemFeatureWidget(feature: feature),
);
},
),
);
}
}
更多关于Flutter远程日志记录插件flutter_feature_remote_logging的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter远程日志记录插件flutter_feature_remote_logging的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_feature_remote_logging
是一个用于在 Flutter 应用中实现远程日志记录的插件。它允许开发者将应用的日志信息发送到远程服务器,以便在需要时进行调试和分析。以下是如何使用 flutter_feature_remote_logging
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 flutter_feature_remote_logging
插件的依赖:
dependencies:
flutter:
sdk: flutter
flutter_feature_remote_logging: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化插件
在你的 Flutter 应用中初始化 flutter_feature_remote_logging
插件。通常,你可以在 main.dart
文件中进行初始化:
import 'package:flutter/material.dart';
import 'package:flutter_feature_remote_logging/flutter_feature_remote_logging.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化远程日志记录插件
await FlutterFeatureRemoteLogging.initialize(
apiUrl: 'https://your-remote-logging-server.com/api/logs', // 远程日志服务器的URL
appId: 'your-app-id', // 应用的唯一标识符
appVersion: '1.0.0', // 应用的版本号
enableDebugLogs: true, // 是否启用调试日志
);
runApp(MyApp());
}
3. 记录日志
在你的应用代码中,你可以使用 FlutterFeatureRemoteLogging
来记录日志。例如:
import 'package:flutter/material.dart';
import 'package:flutter_feature_remote_logging/flutter_feature_remote_logging.dart';
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Remote Logging Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 记录一条日志
FlutterFeatureRemoteLogging.log(
level: LogLevel.INFO,
message: 'Button pressed',
timestamp: DateTime.now(),
additionalData: {'button': 'ElevatedButton'},
);
},
child: Text('Log Event'),
),
),
),
);
}
}
4. 配置远程服务器
你需要确保你的远程服务器能够接收和处理日志数据。通常,服务器需要提供一个 API 端点来接收日志数据,并将其存储或处理。
5. 处理日志级别
flutter_feature_remote_logging
支持不同的日志级别,如 DEBUG
、INFO
、WARNING
、ERROR
等。你可以根据需要记录不同级别的日志:
FlutterFeatureRemoteLogging.log(
level: LogLevel.ERROR,
message: 'An error occurred',
timestamp: DateTime.now(),
additionalData: {'errorCode': '404'},
);
6. 自定义日志数据
你可以通过 additionalData
参数传递自定义的日志数据,以便在远程服务器上进行更详细的分析:
FlutterFeatureRemoteLogging.log(
level: LogLevel.INFO,
message: 'User logged in',
timestamp: DateTime.now(),
additionalData: {'userId': '12345', 'username': 'john_doe'},
);
7. 调试模式
在调试模式下,你可以启用 enableDebugLogs
参数来在控制台中打印日志信息,以便在开发过程中进行调试。
8. 处理网络错误
在实际应用中,网络连接可能会不稳定。你可以通过捕获异常来处理网络错误,并决定是否重试或记录本地日志。
try {
await FlutterFeatureRemoteLogging.log(
level: LogLevel.INFO,
message: 'Network request successful',
timestamp: DateTime.now(),
);
} catch (e) {
print('Failed to send log: $e');
// 处理错误,例如记录到本地存储
}
9. 清理和关闭
在应用关闭时,你可以选择清理或关闭日志记录器,以确保所有日志都被发送到远程服务器。
[@override](/user/override)
void dispose() {
FlutterFeatureRemoteLogging.dispose();
super.dispose();
}