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 政策
隐私协议
数据处理和安全协议
联系我们
词汇表

C++ SDK 上传日志

PDF
聚焦模式
字号
最后更新时间: 2025-11-07 17:40:37
本文介绍如何快速使用日志服务的 C++ SDK 实现日志上传的操作。更多 SDK 使用的详细内容,可见代码仓库 tencentcloud-cls-sdk-c++

前提条件

创建并获取云 API 密钥信息 accesskeyid 和 accessKeysecret,密钥信息获取请前往 API 密钥管理
并请确保密钥关联的账号具有相应的 SDK 上传日志权限

准备开发环境

在安装 C++ SDK 之前,您需要准备 C++ 语言的开发环境,可参考如下命令安装开发环境(下述以 Centos 为例)。
# 安装编译工具和依赖(若未安装 C++可以使用)
sudo yum install gcc gcc-c++ automake autoconf libtool make
sudo yum install cmake

安装 C++ SDK

安装依赖

C++ SDK 的安装需要依赖于 protobuf,请执行以下命令安装 protobuf。
# 手动下载 protobuf
wget https://github.com/protocolbuffers/protobuf/archive/v2.6.1.tar.gz
# 解压源代码
tar -xzf v2.6.1.tar.gz
# 进入解压后的目录
cd protobuf-2.6.1
# 生成配置文件,若执行该步骤一直不动 or 时间超时错误,请参考下方【常见报错处理】
./autogen.sh
# 配置安装
./configure
#编译,这一步可能有点久请耐心等待
make
sudo make install
sudo ldconfig

下载并安装 SDK

下载并安装腾讯云日志服务的 C++ SDK。
# 下载日志服务 SDK
git clone https://github.com/TencentCloud/tencentcloud-cls-sdk-cpp.git
# 进入目录
cd tencentcloud-cls-sdk-cpp
# 安装依赖
sudo yum install boost-devel
sudo yum install openssl-devel
sudo yum install libcurl-devel
# 生成构建文件
cmake .
# 编译 SDK
make
sudo make install

运行示例

以运行日志服务 SDK Demo 中 cls 文件夹下的日志上传代码 sample.cpp 为例,代码解析见下方。实际使用时需替换代码中的密钥等信息方可运行
1. 编译示例代码。
# 编译示例代码
g++ -o sample ./cls/sample.cpp -std=c++11 -O2 -L/root/tencentcloud-cls-sdk-cpp-main -lclssdk -lcurl -lprotobuf -lssl -lcrypto -lboost_thread
2. 执行以下运行编译后的示例文件,上传日志。若执行过程报error while.....错,可参见 常见报错处理
./sample
如果看到类似以下的输出,即代表成功上传日志:
statusCode:200 requestId: content: bodyBytes:49 header:key:Content-Length value:0 header:key:Date value:Wed, 20 Nov 2024 03:37:25 GMT header:key:X-Cls-Requestid value:e7329d6d-9a48-4091-bb0c-5cea8d1c6f48 header:key:X-Cls-Trace-Id value: header:key:x-cls-requestid value:

请求参数

变量
类型
是否必填
说明
endpoint
String
域名信息,填写请参见 可用地域 中 API 上传日志 Tab 中的域名。
accesskeyid
String
云 API 密钥信息,密钥信息获取请前往 API 密钥管理。并请确保密钥关联的账号具有相应的 SDK 上传日志权限
accessKeysecret
String
云 API 密钥信息,密钥信息获取请前往 API 密钥管理。并请确保密钥关联的账号具有相应的 SDK 上传日志权限
topic
String
日志主题的 ID 信息。

日志上传示例代码

以下代码以 SDK 的 demo 文件中的 sample.cpp 为例,通过调用 SDK 完成日志上传的操作,示例代码如下所示。
不建议将云 API 密钥信息明文存储至工程代码中,可通过环境变量动态获取云 API 密钥信息,具体操作,请参见 配置环境变量
#include "cls/producerclient.h"
#include "cls/common.h"
#include "cls/cls_logs.pb.h"
#include "cls/logproducerconfig.pb.h"
#include <string>
#include <iostream>
#include <unistd.h>
#include <cstdlib>
#include "cls/result.h"
#include "cls/error.h"
using namespace tencent_log_sdk_cpp_v2;
using namespace std;


class UserResult : public CallBack
{
public:
UserResult() = default;
~UserResult() = default;
void Success(PostLogStoreLogsResponse result) override { std::cout << result.Printf() << std::endl; }
void Fail(PostLogStoreLogsResponse result) override
{
std::cout << result.Printf() << std::endl;
// std::cout<<result.loggroup_.ShortDebugString().c_str()<<std::endl;
}
};


int main()
{
cls_config::LogProducerConfig config;
// 填入域名信息,填写指引:https://www.tencentcloud.com/document/product/614/18940?from_cn_redirect=1#.E5.9F.9F.E5.90.8D,请参见链接中 API 上传日志 Tab 中的域名
config.set_endpoint("ap-xxxxxxx.cls.tencentcs.com");

// 填入云API密钥信息。密钥信息获取请前往:https://console.tencentcloud.com/cam/capi
// 并请确保密钥关联的账号具有相应的日志上传权限,权限配置指引:https://www.tencentcloud.com/document/product/614/68374?from_cn_redirect=1#.E4.BD.BF.E7.94.A8-api-.E4.B8.8A.E4.BC.A0.E6.95.B0.E6.8D.AE
// 本示例从环境变量中获取,环境变量配置指引:https://www.tencentcloud.com/document/product/614/113851?from_cn_redirect=1
config.set_acceskeyid(getenv("TENCENTCLOUD_SECRET_ID"));
config.set_accesskeysecret(getenv("TENCENTCLOUD_SECRET_KEY"));

// 设置要上传日志的主题 ID,替换为您的 Topic ID
std::string topic = "xxxxxxxxxxxxxxxxxxxxxxxxx";
auto client = std::make_shared<ProducerClient>(config);
auto callback = std::make_shared<UserResult>();

client->Start();
// 创建日志对象
cls::Log log;
// 设置当前时间为日志时间
log.set_time(time(NULL));
// 构造日志数据内容
auto content = log.add_contents();
// 设置日志内容的键值信息
content->set_key("content");
content->set_value("this my test");
// 发送日志并获取返回结果
PostLogStoreLogsResponse ret = client->PostLogStoreLogs(topic, log, callback);
if(ret.statusCode != 0){
cout<<ret.content<<endl;
}
client->LogProducerEnvDestroy();

return 0;
}


常见报错处理

执行 ./autogen.sh 时,时间超时卡住不动

1. 在 protobuf 目录中,手动下载 googletest 文件。
# 下载文件,解压并改名(适应执行代码)
wget https://github.com/google/googletest/archive/release-1.5.0.tar.gz
tar -xzf googletest-release-1.5.0.tar.gz
mv googletest-release-1.5.0 gtest
2. 在 protobuf 目录中,继续执行./autogen.sh 即可。
# 执行命令
./autogen.sh

执行可运行文件./sample 时候报错

./sample: error while loading shared libraries: libprotobuf.so.9: cannot open shared object file: No such file or directory
1. 查看 protobuf.so 文件的位置,执行以下命令:
whereis libprotobuf.so.9
2. 执行 cat /etc/ld.so.conf 查看是否有第一步的路径。



3. 如果发现没有的话,把第一步输出的路径,则添加到 ld.so.conf。以上图为例,则需要把 /usr/local/lib 添加到 ld.so.conf
4. 命令行执行 ldconfig 加载文件。
ldconfig

结语

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

帮助和支持

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

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

文档反馈