更新时间:2025-11-20 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。

相关文档