tencent cloud

日志服务

动态与公告
产品动态
公告
新手指引
产品简介
产品概述
产品优势
地域和访问域名
规格与限制
基本概念
购买指南
计费概述
产品定价
按量计费(后付费)
欠费说明
清理日志服务资源
成本优化
常见问题
快速入门
一分钟入门指南
入门指南
使用 Demo 日志快速体验 CLS
操作指南
资源管理
权限管理
日志采集
指标采集
日志存储
指标存储
检索分析(日志主题)
检索分析(指标主题)
仪表盘
数据处理
投递与消费
监控告警
云产品中心
DataSight 独立控制台
历史文档
实践教程
日志采集
检索分析
仪表盘
监控告警
投递和消费
成本优化
开发者指南
通过 iframe 内嵌 CLS(旧方案)
通过 Grafana 使用 CLS
API 文档
History
Introduction
API Category
Making API Requests
Topic Management APIs
Log Set Management APIs
Index APIs
Topic Partition APIs
Machine Group APIs
Collection Configuration APIs
Log APIs
Metric APIs
Alarm Policy APIs
Data Processing APIs
Kafka Protocol Consumption APIs
CKafka Shipping Task APIs
Kafka Data Subscription APIs
COS Shipping Task APIs
SCF Delivery Task APIs
Scheduled SQL Analysis APIs
COS Data Import Task APIs
Data Types
Error Codes
常见问题
健康监测问题解释
采集相关
检索分析相关
其他问题
服务等级协议
CLS 政策
隐私协议
数据处理和安全协议
联系我们
词汇表

Flutter SDK 上传日志

PDF
聚焦模式
字号
最后更新时间: 2025-11-07 17:40:39
本文介绍如何快速使用日志服务的Flutter SDK 实现日志上传的操作。

前提条件

创建并获取云 API 密钥信息 accessKey 和 accessSecret,密钥信息获取请前往 API 密钥管理
并请确保密钥关联的账号具有相应的 SDK 上传日志权限
已安装 Flutter 环境。更多信息请参见 Install Flutter

安装 Flutter SDK

1. 创建 Flutter 项目。
2. 在项目的根目录下执行如下命令添加依赖。
flutter pub add tencentcloud_cls_sdk_dart
3. 安装完成后,在您的 Dart 文件中导入日志服务模块。
import 'package:tencentcloud_cls_sdk_dart/tencentcloud_cls_sdk_dart.dart';

请求参数

变量
类型
是否必填
说明
host
String
地域信息,填写请参见 可用地域 中 API 上传日志 Tab 中的域名。
accessKey
String
云 API 密钥信息,密钥信息获取请前往 API 密钥管理。并请确保密钥关联的账号具有相应的 SDK 上传日志权限
accessSecret
String
云 API 密钥信息,密钥信息获取请前往 API 密钥管理。并请确保密钥关联的账号具有相应的 SDK 上传日志权限
topicId
String
日志主题的 ID 信息。
accessToken
String
临时密钥的 token,如使用临时密钥可填入。

日志上传示例代码

在您的 Flutter 项目中,可以使用如下的示例代码实现日志上传的能力,示例代码如下所示。
在代码中直接明文使用云 API 密钥(accessKey、accessSecret)风险较高,为确保安全性,建议使用 临时密钥 进行鉴权。
import 'package:flutter/material.dart';
import 'package:tencentcloud_cls_sdk_dart/tencentcloud_cls_sdk_dart.dart';

Future<void> main() async {
await RustLib.init();

runApp(const MyApp());
}

class MyApp extends StatefulWidget {
const MyApp({super.key});

@override
State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
LogProducer? _logProducer;
String _consoleText = '';


@override
void initState() {
super.initState();

if (!mounted) return;
print("application started.");
}

void print(String message) {
setState(() {
_consoleText += message;
_consoleText += '\\n';
});
}

void _initProducer() async {
_logProducer = LogProducer(
topicId: '',
accessKey: '',
accessSecret: '',
accessToken: '',
host: 'ap-XXXXXX.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
Widget build(BuildContext context) {
Color color = Theme.of(context).primaryColor;

return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('tencent cloud cls flutter sdk demo')),
body: Column(
children: [
_buildConsoleText(),
_buildButton(color, 'init', _initProducer),
_buildButton(color, 'set callback', _callback),
_buildButton(color, 'send', _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),
)),
)),
],
);
}

}

结语

通过以上步骤,您可以快速使用腾讯云 CLS 的 Flutter SDK 完成日志的上传操作。如遇到任何问题,请 联系我们 获取帮助。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈