Flutter腾讯云日志服务插件tencentcloud_cls_sdk_dart的使用
Flutter腾讯云日志服务插件tencentcloud_cls_sdk_dart的使用
tencentcloud_cls_sdk_dart
这是一个新的Flutter FFI插件项目。
使用步骤
1. 初始化插件
在使用插件之前,首先需要初始化Rust库。确保在main()
函数中调用RustLib.init()
。
await RustLib.init();
2. 配置日志生产者
创建一个日志生产者实例,用于发送日志到腾讯云日志服务。以下是配置参数:
topicId
: 日志主题ID。accessKey
: 访问密钥。accessSecret
: 访问密钥的密文。accessToken
: 访问令牌。host
: 腾讯云日志服务的API地址。waitSendLogQueue
: 等待队列的最大日志数量。addLogQueue
: 添加日志队列的最大日志数量。lingerMs
: 日志合并的时间间隔(毫秒)。
void _initProducer() async {
_logProducer = LogProducer(
topicId: '', // 替换为实际的Topic ID
accessKey: '', // 替换为实际的Access Key
accessSecret: '', // 替换为实际的Access Secret
accessToken: '', // 替换为实际的Access Token
host: 'ap-guangzhou-open.cls.tencentcs.com',
waitSendLogQueue: 1000,
addLogQueue: 1000,
lingerMs: 2000,
);
print('init producer client success');
}
3. 设置回调函数
为了接收日志发送的状态信息,可以设置回调函数。回调函数会返回请求ID、状态码、主题ID以及错误消息。
void _callback() async {
if (!check()) {
return;
}
_logProducer?.setCallback(dartCallback: (topicId, requestId, status, errorMessage) =>
print('$requestId!, $status, $topicId, $errorMessage'));
print('init callback success');
}
4. 发送日志
通过调用addLog
方法将日志数据添加到队列中。日志数据以键值对的形式传递。
void _sendLog() async {
if (!check()) {
return;
}
_logProducer?.addLog(log: { 'hello': 'world' });
}
5. 检查是否已初始化
在执行任何操作之前,检查日志生产者是否已成功初始化。
bool check() {
if (null == _logProducer) {
print('you should init producer first.');
return false;
}
return true;
}
完整示例代码
以下是一个完整的示例代码,展示了如何使用tencentcloud_cls_sdk_dart
插件。
import 'package:flutter/material.dart';
import 'package:tencentcloud_cls_sdk_dart/tencentcloud_cls_sdk_dart.dart';
Future<void> main() async {
await RustLib.init(); // 初始化Rust库
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
LogProducer? _logProducer;
String _consoleText = '';
void print(String message) {
setState(() {
_consoleText += message;
_consoleText += '\n';
});
}
void _initProducer() async {
_logProducer = LogProducer(
topicId: '', // 替换为实际的Topic ID
accessKey: '', // 替换为实际的Access Key
accessSecret: '', // 替换为实际的Access Secret
accessToken: '', // 替换为实际的Access Token
host: 'ap-guangzhou-open.cls.tencentcs.com',
waitSendLogQueue: 1000,
addLogQueue: 1000,
lingerMs: 2000,
);
print('init producer client success');
}
void _callback() async {
if (!check()) {
return;
}
_logProducer?.setCallback(dartCallback: (topicId, requestId, status, errorMessage) =>
print('$requestId!, $status, $topicId, $errorMessage'));
print('init callback success');
}
void _sendLog() async {
if (!check()) {
return;
}
_logProducer?.addLog(log: { 'hello': 'world' });
}
bool check() {
if (null == _logProducer) {
print('you should init producer first.');
return false;
}
return true;
}
[@override](/user/override)
Widget build(BuildContext context) {
Color color = Theme.of(context).primaryColor;
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('腾讯云CLS Flutter SDK Demo')),
body: Column(
children: [
_buildConsoleText(),
_buildButton(color, '初始化', _initProducer),
_buildButton(color, '设置回调', _callback),
_buildButton(color, '发送日志', _sendLog),
],
),
),
);
}
Widget _buildConsoleText() {
return Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
flex: 1,
child: Container(
margin: const EdgeInsets.only(bottom: 18),
padding: const EdgeInsets.all(6),
height: 140,
decoration: BoxDecoration(
border: Border.all(color: Colors.grey, width: 0.67),
color: Colors.black,
),
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: Text(
_consoleText,
style: const TextStyle(
color: Colors.white,
fontSize: 12,
letterSpacing: 2,
wordSpacing: 2,
fontFeatures: [FontFeature.tabularFigures()],
),
),
),
),
),
],
);
}
Widget _buildButton(Color color, String label, VoidCallback? onPressed) {
return Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
flex: 1,
child: Container(
margin: const EdgeInsets.only(left: 16, top: 8, right: 16),
child: TextButton(
onPressed: onPressed,
style: ButtonStyle(
shape: WidgetStateProperty.all(RoundedRectangleBorder(borderRadius: BorderRadius.circular(12))),
side: WidgetStateProperty.all(BorderSide(color: color, width: 0.67)),
backgroundColor: WidgetStateProperty.all(Colors.transparent),
padding: WidgetStateProperty.all(const EdgeInsets.only(left: 12, top: 6, right: 12, bottom: 6)),
),
child: Text(
label,
style: TextStyle(fontSize: 22, fontWeight: FontWeight.w400, color: color),
),
),
),
),
],
);
}
}
更多关于Flutter腾讯云日志服务插件tencentcloud_cls_sdk_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
tencentcloud_cls_sdk_dart
是一个用于在 Flutter 应用中集成腾讯云日志服务(CLS, Cloud Log Service)的 Dart SDK。通过这个插件,你可以将应用的日志数据发送到腾讯云的日志服务中,方便进行日志的集中管理和分析。
安装插件
首先,你需要在 pubspec.yaml
文件中添加 tencentcloud_cls_sdk_dart
插件的依赖:
dependencies:
tencentcloud_cls_sdk_dart: ^0.0.1
然后运行 flutter pub get
来安装插件。
初始化 SDK
在使用 SDK 之前,你需要进行初始化。通常你可以在 main.dart
文件中进行初始化操作。
import 'package:tencentcloud_cls_sdk_dart/tencentcloud_cls_sdk_dart.dart';
void main() {
// 初始化 SDK
CLSConfig config = CLSConfig(
secretId: 'your-secret-id',
secretKey: 'your-secret-key',
region: 'ap-guangzhou', // 你的腾讯云区域
topicId: 'your-topic-id', // 你的日志主题 ID
);
CLSClient.initialize(config);
runApp(MyApp());
}
发送日志
初始化完成后,你可以使用 CLSClient
来发送日志。
import 'package:tencentcloud_cls_sdk_dart/tencentcloud_cls_sdk_dart.dart';
void sendLog() async {
try {
// 创建日志内容
Map<String, dynamic> logContent = {
'level': 'INFO',
'message': 'This is a test log message',
'timestamp': DateTime.now().millisecondsSinceEpoch,
};
// 发送日志
await CLSClient.instance.putLogs([logContent]);
print('Log sent successfully');
} catch (e) {
print('Failed to send log: $e');
}
}
处理日志发送结果
putLogs
方法返回一个 Future
,你可以通过 await
来等待日志发送的结果,或者使用 then
和 catchError
来处理成功和失败的情况。
CLSClient.instance.putLogs([logContent])
.then((response) {
print('Log sent successfully: $response');
})
.catchError((error) {
print('Failed to send log: $error');
});