前提条件
创建并获取云 API 密钥信息 accesskeyid 和 accessKeysecret,密钥信息获取请前往 API 密钥管理。
并请确保密钥关联的账号具有相应的 SDK 上传日志权限。
准备开发环境
在安装 C++ SDK 之前,您需要准备 C++ 语言的开发环境,可参考如下命令安装开发环境。
# 安装编译工具和依赖(若未安装 C++可以使用)sudo yum install gcc gcc-c++ automake autoconf libtool makesudo yum install cmake
安装 C++ SDK
安装依赖
C++ SDK 的安装需要依赖于 protobuf,请执行以下命令安装 protobuf。
# 手动下载 protobufwget 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#编译,这一步可能有点久请耐心等待makesudo make installsudo ldconfig
下载并安装 SDK
下载并安装腾讯云日志服务的 C++ SDK。
# 下载日志服务 SDKgit clone https://github.com/TencentCloud/tencentcloud-cls-sdk-cpp.git# 进入目录cd tencentcloud-cls-sdk-cpp# 安装依赖sudo yum install boost-develsudo yum install openssl-develsudo yum install libcurl-devel# 生成构建文件cmake .# 编译 SDKmakesudo 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 | 是 | |
accesskeyid | String | 是 | |
accessKeysecret | String | 是 | |
topic | String | 是 | 日志主题的 ID 信息。 |
日志上传示例代码
以下代码以 SDK 的 demo 文件中的 sample.cpp 为例,通过调用 SDK 完成日志上传的操作,示例代码如下所示。
#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://cloud.tencent.com/document/product/614/18940#.E5.9F.9F.E5.90.8D,请参见链接中 API 上传日志 Tab 中的域名config.set_endpoint("ap-xxxxxxx.cls.tencentcs.com");// 填入云API密钥信息。密钥信息获取请前往:https://console.cloud.tencent.com/cam/capi// 并请确保密钥关联的账号具有相应的日志上传权限,权限配置指引:https://cloud.tencent.com/document/product/614/68374#.E4.BD.BF.E7.94.A8-api-.E4.B8.8A.E4.BC.A0.E6.95.B0.E6.8D.AE// 本示例从环境变量中获取,环境变量配置指引:https://cloud.tencent.com/document/product/614/113851config.set_acceskeyid(getenv("TENCENTCLOUD_SECRET_ID"));config.set_accesskeysecret(getenv("TENCENTCLOUD_SECRET_KEY"));// 设置要上传日志的主题 ID,替换为您的 Topic IDstd::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.gztar -xzf googletest-release-1.5.0mv 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
结语