更新时间:2025-06-18 GMT+08:00
分享

云日志服务C++ SDK

云日志服务SDK提供了C++语言上报日志的一系列方法,方便用户直接使用编码方式上报日志到云日志服务后台。

传输协议

HTTPS

使用前提

使用说明

当用户修改权限后,权限信息在一天后生效。通过SDK上报日志到LTS的时间相距当前时间不超过2天,否则上报日志会被LTS删除。

注意事项

认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。

安装C++ SDK

  1. 获取LTS C++ SDK代码

    git clone https://gitee.com/lordstar-habile/huaweicloud-lts-cpp-sdk.git

  2. 引用日志LTS C++头文件

    #include <sdk/Config.h>
    #include <sdk/Producer.h>
    #include <client/logger.h>

  3. 编写上报日志代码。

    可以自定义发送成功与失败时的回调方法,实现方式请参考如下命令:创建CallBack对象,实现Success和Fail方法,并且在发送日志时直接使用。

    typedef void (*callback)(Result*);
    class CallBack {
    public:
        callback Success;
        callback Fail;
    };
    int Producer::SendLog(std::string groupId, std::string streamId, std::vector<Log*> log, CallBack* cb);

    示例如下:

    #include <sdk/Config.h>
    #include <sdk/Producer.h>
    #include <client/logger.h>
    
    Config* GetConfig() {
        Config* cfg = new Config();
    
        cfg->Endpoint = "endpoint";
        cfg->AccessKeyID = "ak";
        cfg->AccessKeySecret = "sk";
        cfg->RegionId = "region";
        cfg->ProjectId = "pid";
    
        cfg->validateProducerConfig();
    
        return cfg;
    }
    
    Log* generateLog() {
        std::vector<std::string> logContentArr = {"content for this test no.1"};
        std::map<std::string, std::string> labels = {{"keyA","valueA"}};
    
        return GenerateLog(logContentArr, labels);
    }
    
    void userCallBack(Result* result) {
        if (result == nullptr) {
            return;
        }
    
        const char* isSuccess = "false";
        if (result->successful) {
            isSuccess = "true";
        }
    
        LogPrint(LOG_LEVEL_WARN, "userCallBack [%s]", isSuccess);
    }
    
    int main() {
        Config *cfg = GetConfig();
    
        Producer *producerInstance = InitProducer(cfg);
        producerInstance->Start();
    
        CallBack *cb = new CallBack();
        cb->Success = userCallBack;
        cb->Fail = userCallBack;
    
        Log *log = generateLog();
        producerInstance->SendLog("groupId", "streamId", std::vector<Log *>{log}, cb);
    
        SleepMs(60 * 60 * 1000);
    
        producerInstance->Close();
    
        delete cb;
    
        delete cfg;
    }

配置参数说明

  • producer config参数说明。

    参数名称

    描述

    类型

    是否需要填写

    默认值

    ProjectId

    华为云号的项目ID(project id)。

    String

    必填

    -

    AccessKeyId

    华为云号的AK。

    String

    必填

    -

    AccessKeySecret

    华为云号的SK。

    String

    必填

    -

    RegionName

    云日志服务的区域。

    String

    必填

    -

    Endpoint

    上报目的。

    String

    必填

    -

    TotalSizeInBytes

    单个producer实例能缓存的日志大小上限。

    int

    选填

    104857600(即100MB)

    MaxBlockSec

    如果producer可用空间不足,调用者在send方法上的最大阻塞时间,默认为6 秒。建议为0秒。

    • 当maxBlockMs值>=0时,则阻塞到设置的时间,如果到达阻塞时间,还是不能获取到内存,即报错且丢弃日志。
    • 当maxBlockMs值=-1时,则一直阻塞到发送成功,且不会丢弃日志。

    long

    选填

    60s

    MaxIoWorkers

    执行日志发送任务的任务池大小。

    int

    选填

    默认10个

    MaxBatchSize

    当一个 ProducerBatch 中缓存的日志大小大于等于 batchSizeThresholdInBytes 时,该 batch 将被发送。

    int

    选填

    524288(即0.5MB)

    MaxBatchCount

    当一个 ProducerBatch 中缓存的日志条数大于等于 batchCountThreshold 时,该 batch 将被发送。

    int

    选填

    4096

    LingerMs

    一个 ProducerBatch 从创建到可发送的逗留时间。

    int

    选填

    2s

    Retries

    如果某个 ProducerBatch 首次发送失败,能够对其重试的次数,建议为 3 次。如果 retries 小于等于 0,该 ProducerBatch 首次发送失败后将直接进入失败队列。

    int

    选填

    10

    BaseRetryBackoffMs

    首次重试的退避时间。

    long

    选填

    0.1s

    MaxRetryBackoffMs

    重试的最大退避时间。

    long

    选填

    50s

  • 日志生成GenerateLog方法类参数说明。单次上报条数小于4096条,且小于512K。

    参数名称

    描述

    类型

    是否需要填写

    contents

    批量日志内容

    []string

    labels

    日志标签,map格式

    map[string]string

  • 日志上报SendLog方法类参数说明
    表1 SendLog方法类参数说明

    参数名称

    描述

    类型

    是否需要填写

    groupId

    日志组id

    long

    streamId

    日志流id

    String

    log

    日志结构

    struct log

参数获取方式

  • 上线区域表,使用华为云主机时参考以下信息:
    表2 区域表

    区域名称

    区域

    终端节点

    华北-北京四

    cn-north-4

    https://lts-access.cn-north-4.myhuaweicloud.com:8102

    华东-上海一

    cn-east-3

    https://lts-access.cn-east-3.myhuaweicloud.com:8102

    华南-广州

    cn-south-1

    https://lts-access.cn-south-1.myhuaweicloud.com:8102

    亚太-新加坡

    ap-southeast-3

    https://lts-access.ap-southeast-3.myhuaweicloud.com:8102

    当前仅华北-北京四、华东-上海一、华南-广州区域使用SDK时支持跨云/本地上报日志,Endpoint端口使用443。

  • 日志组ID:在云日志服务控制台,选择“日志管理”,鼠标悬浮在日志组名称上,可查看日志组名称和日志组ID。
  • 日志流ID:单击日志组名称对应的按钮,鼠标悬浮在日志流名称上,可查看日志流名称和日志流ID。

相关文档