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),
              ),
            ),
          ),
        ),
      ],
    );
  }
}
1 回复

更多关于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 来等待日志发送的结果,或者使用 thencatchError 来处理成功和失败的情况。

CLSClient.instance.putLogs([logContent])
    .then((response) {
      print('Log sent successfully: $response');
    })
    .catchError((error) {
      print('Failed to send log: $error');
    });
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!