C++ SDK 上传日志

最近更新时间:2025-01-09 14:10:42

我的收藏
本文介绍如何快速使用日志服务的 C++ SDK 实现日志上传的操作。更多 SDK 使用的详细内容,可见代码仓库 tencentcloud-cls-sdk-c++

前提条件

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

准备开发环境

在安装 C++ SDK 之前,您需要准备 C++ 语言的开发环境,可参考如下命令安装开发环境。
# 安装编译工具和依赖(若未安装 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://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/113851
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
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 完成日志的上传操作。如遇到任何问题,请 联系我们 获取帮助。