活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 12.12年度钜惠 NEW 爆款云主机2核2G仅需28.8元/年,X实例35.1元/半年起! 8代机+XSSD新客专享2.5折!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云AI产品特惠 NEW 人脸识别+文字识别焕新,新用户免费试用
  • 中小企业服务商合作专区 国家云助力中小企业腾飞,高额上云补贴重磅上线
  • 出海产品促销专区 NEW 爆款云主机低至2折,高性价比,不限新老速来抢购!
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

息壤智算

领先开放的智算服务平台,提供算力、平台、数据、模型、应用“五位一体”智算服务体系,构建全流程的AI基础设施能力
智算云(DeepSeek专区)
AI Store
  • 算力市场
  • 模型市场
  • 应用市场
  • MCP市场
算力互联调度平台
  • 裸金属
  • 定制裸金属
训推服务
  • 模型开发
  • 训练任务
  • 服务部署
模型推理服务
  • 模型广场
  • 体验中心
  • 服务接入
应用托管
  • 应用实例
科研助手
  • 科研智能体
  • 科研服务
  • 开发机
  • 并行计算
大模型
  • DeepSeek-V3.1
  • DeepSeek-R1-0528
  • DeepSeek-V3-0324
  • Qwen3-235B-A22B
  • Qwen3-32B
智算一体机
  • 智算一体机
模型适配专家服务
  • 模型适配专家服务
算力服务商
  • 入驻算力服务商

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场进入AI Store创新解决方案智云上海应用生态专区
AI应用
  • 泛微合同管理解决方案
  • 泛微数智大脑Xiaoe.AI解决方案
  • MaxKB知识库解决方案
  • 天翼AI文创
AI服务
  • 昆仑AI训推服务解决方案
  • 国信模型服务解决方案
企业应用
  • 翼电子签约解决方案
  • 翼协同解决方案
  • 翼电签-契约锁解决方案
  • 翼视频云归档解决方案
教育应用
  • 翼电子教室
  • 潜在AI教育解决方案
建站工具
  • SSL证书
  • 翼定制建站解决方案
  • 翼多端小程序解决方案
办公协同
  • 天翼云企业云盘
  • 安全邮箱
灾备迁移
  • 云管家2.0
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)

定价

协助您快速了解云产品计费模式、价格详情,轻松预估上云成本
价格计算器
  • 动态测算产品价格
定价策略
  • 快速了解计费模式

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼信创云专区
  • 信创云专区
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 服务保障
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家
我要反馈
  • 建议与反馈
  • 用户体验官
信息公告
  • 客户公告

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 息壤智算
  • 产品
  • 解决方案
  • 应用商城
  • 定价
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心
      文档中心

      云日志服务

      云日志服务

      • 云日志服务

      无数据

        • 产品动态
        • 产品介绍
        • 产品定义
        • 功能特性
        • 产品优势
        • 应用场景
        • 术语解释
        • 使用限制
        • 基础资源
        • 数据读写
        • 日志采集器
        • 查询与分析
        • 操作系统
        • 与其他服务关系
        • 计费说明
        • 计费概述
        • 计费模式
        • 按需计费
        • 资源包
        • 计费项
        • 计费样例
        • 欠费说明
        • 停止计费与退订
        • 计费FAQ
        • 快速入门
        • 入门概览
        • 开通云日志服务
        • 创建日志项目与日志单元
        • 日志接入
        • 查询与分析
        • 用户指南
        • 日志管理
        • 日志管理概述
        • 资源统计
        • 管理日志项目
        • 管理日志单元
        • 超额采集配置
        • 标签管理
        • 日志接入
        • 概述
        • 主机管理
        • 主机组管理
        • 采集器安装
        • 采集器管理
        • 采集常见错误类型
        • 接入云主机-文本日志
        • 接入云容器引擎-应用日志
        • 日志结构化解析
        • 单行全文模式
        • 多行全文模式
        • 单行分隔符模式
        • 单行正则模式
        • 多行正则模式
        • JSON模式
        • Nginx分词
        • 日志主题
        • 自定义日志时间
        • API接入
        • API接入概述
        • 访问地址(Endpoint)
        • 上报日志
        • SDK接入
        • SDK接入概述
        • 云日志服务Go SDK
        • 云日志服务Java SDK
        • 云日志服务Python SDK
        • 云日志服务C++ SDK
        • 云日志服务Log4j2 SDK
        • 云日志服务Logback SDK
        • 云日志服务Logging handler SDK
        • 云日志服务C SDK
        • 云日志服务.NET SDK
        • 云日志服务PHP SDK
        • 云日志服务 node.js SDK
        • 错误码
        • 其他接入方式
        • Systemd Journal日志采集
        • 使用Syslog协议(采集器)上传日志
        • 通过对象存储导入日志
        • 通过kafka导入日志
        • Windows事件日志采集
        • Nginx日志采集
        • 日志模拟接入
        • 云服务日志接入
        • 应用服务网格
        • 关系数据库PostgreSQL版
        • 微服务引擎-云原生网关
        • NAT网关
        • 关系数据库MySQL
        • 云搜索
        • 翼MR
        • 分布式缓存服务Redis
        • 关系数据库SQL Server版
        • 分布式消息服务Kafka
        • 云服务操作日志
        • 文档数据库服务
        • 对象存储访问日志
        • 弹性负载均衡访问日志
        • 查询与分析
        • 日志查询
        • 日志查询
        • 上下文查询
        • 快速分析
        • 保存快速查询日志条件
        • 查询语法
        • SQL统计分析
        • 概述
        • SQL语法
        • SQL函数
        • 函数概览
        • 聚合函数
        • 字符串函数
        • 日期和时间函数
        • JSON函数
        • 正则式函数
        • 数组函数
        • Map映射函数
        • 数学计算
        • 数学统计
        • 估算函数
        • 二进制函数
        • 位运算函数
        • 地理函数
        • HyperLogLog函数
        • 比较运算符
        • 窗口函数
        • 条件表达式
        • IP地址转换函数
        • URL函数
        • 手机号码函数
        • 机器学习函数
        • 单位转换函数
        • 类型转换函数
        • 经典分析样例
        • 索引配置
        • 内置保留字段
        • 日志聚类
        • 日志可视化
        • 可视化概述
        • 统计图表
        • 概述
        • 表格
        • 柱状图
        • 时序图
        • 饼图
        • 流图
        • 数值图
        • 散点图
        • 词云图
        • 漏斗图
        • 雷达图
        • 拓扑图
        • 仪表盘
        • 创建仪表盘
        • 添加过滤器
        • 添加可视化图表
        • 权限管理
        • 数据加工
        • 数据加工概述
        • 基本概念
        • 创建数据加工任务
        • 管理数据加工任务
        • 观测与监控数据加工任务
        • 数据加工语法
        • 概述
        • 流程控制函数
        • 事件操作函数
        • 字段操作函数
        • 事件操作函数
        • 操作符函数
        • 事件检查函数
        • 转换函数
        • 算术函数
        • 字符串函数
        • 日期时间函数
        • 正则表达式函数
        • 特定结构化数据函数
        • 编码解码函数
        • URL函数
        • 日志转储
        • 概述
        • 转储至分布式消息服务Kafka
        • 转储至对象存储ZOS
        • 日志告警
        • 概述
        • 通知组管理
        • 通知策略管理
        • 告警规则
        • 告警历史
        • 告警事件历史
        • 告警发送历史
        • 静默策略
        • 云审计服务支持的关键操作
        • 最佳实践
        • 将本地日志迁移到云日志服务
        • 优化查询性能
        • 查询Log4j日志
        • 查询分析Nginx访问日志
        • 数据加工-日志过滤
        • 数据加工-为日志空缺字段赋值
        • 数据加工-为日志不存在的字段填充默认值
        • 告警-出现关键字即触发告警
        • 告警-根据关键字出现的次数设置告警
        • 基于业务日志的运维分析
        • API参考
        • API使用说明
        • API
        • 2024-04-25
        • 仪表盘
        • 列取仪表盘订阅
        • 采集配置
        • 采集规则分页列表
        • 获取采集配置详情
        • 采集规则列表
        • 日志单元
        • 日志单元列表
        • 日志单元分页列表
        • 日志服务CLI
        • CLI概述
        • 安装CLI
        • 全局配置
        • CLI使用
        • 常见问题
        • 售前常见问题
        • 日志管理
        • 云日志服务使用建议
        • 云日志服务LTS对比自建ELK,应该如何选择?
        • 如何从第三方云厂商将日志搬迁到天翼云?
        • 数据采集
        • 常见问题
        • 如何查看日志采集器的运行状态?
        • 云日志服务可以采集哪类日志?支持采集哪些文件类型?
        • 云主机采集器无法连通如何处理?
        • 采集器安装失败如何处理?
        • 如何创建云日志服务终端节点?
        • 主机接入配置完成后未采集到日志如何处理?
        • 如何查看与升级插件版本?
        • 主机组中新增云主机后,如何启动日志采集?
        • 如何获取访问密钥(AK/SK)?
        • 数据存储
        • 查询与分析
        • 常见问题
        • 为什么检索不到日志?
        • 查询语法相关问题
        • 数据加工
        • 日志转储
        • 日志告警
        • 常见问题
        • 为什么出现漏告警或者误告警?
        • 触发告警成功,但是通知失败,如何处理?
        • 相关协议
        • 产品服务协议
        • 产品服务等级协议
          无相关产品

          本页目录

          帮助中心云日志服务用户指南日志接入SDK接入云日志服务C++ SDK
          云日志服务C++ SDK
          更新时间 2025-11-11 11:14:33
          • 新浪微博
          • 微信
            扫码分享
          • 复制链接
          最近更新时间: 2025-11-11 11:14:33
          分享文章
          • 新浪微博
          • 微信
            扫码分享
          • 复制链接
          本文主要介绍 云日志服务C++ SDK接入指南。

          1. 前言

          安装使用C++ SDK可以帮助开发者快速接入使用天翼云的日志服务相关功能。

          2. 使用条件

          2.1. 先决条件

          用户需要具备以下条件才能够使用LTS SDK C++版本:

          1、购买并订阅了天翼云的云日志服务,并创建了日志项目和日志单元,获取到相应编码(logProject、logUnit)。

          2、已获取AccessKey 和 SecretKey。

          3、已安装c++ 运行环境,推荐安装c++11或以上版本。

          2.2. 下载及安装

          从官方渠道下载ctyun_lts_cpp_sdk.zip压缩包,放到相应位置后并解压。“ctyun_lts_cpp_sdk”目录中sample_putlogs.cpp为SDK的使用示例代码。

          2.1.1. 依赖

          cmake2.8或更新版本,GCC 4.9或更新版本。以下库及其相关头文件,可在对应Linux发行版的包管理器中安装,括号中给出的是经过验证的版本。

          libcurl-devel   (7.6.1)
          openssl-devel   (1.1.1k)
          protobuf        (3.5.0)
          lz4             (v1.8.3)
          boost          (1.66.0)

          对于 CentOS 安装,可用如下命令搭建依赖环境

          yum install gcc gcc-c++    
          yum install cmake
          yum install libcurl-devel openssl-devel libuuid-devel 
          yum install lz4-devel.x86_64
          yum install protobuf-devel.x86_64
          yum install boost-devel.x86_64

          2.1.2. 编译使用

          1、进入ctyun_lts_cpp_sdk目录下,里面有CMakelists.txt文件。

          2、执行以下命令:

          mkdir build
          cd build
          cmake .. -DCMAKE_INSTALL_PREFIX=..
          make
          make install

          其中make 主要做的工作有:为.proto文件生成对应的.pb.cc、.pb.h,以及编译出静态库文件libltssdk.a。

          3、将ctyun_lts_cpp_sdk的include目录下的头文件,全部移动到您项目的include目录下,(如果直接使用SDK 则可以不用移动)。

          4、之后就可以在您的项目内使用SDK了,只需要引入对应的头文件即可。

          5、编译您的程序,在您目录下内编译您的程序,构建出可执行文件。 如sample_putlogs.cpp:

          g++ sample_putlogs.cpp -I./include -L./lib/ -lcurl -lcrypto -llz4 -lprotobuf -lltssdk

          或者 根据主目录中的Makefile 文件。执行以下命令,也能实现上面的构建出可执行文件。

          make sample_putlogs

          6、执行可执行文件。

          ./sample_putlogs

          3. SDK使用设置

          3.1. 基本使用

          使用 SDK访问 LTS 的服务,需要设置正确的 AccessKey、SecretKey 和服务端 Endpoint,所有的服务可以使用同一 key 凭证来进行访问,但不同的服务需要使用不同的 endpoint 进行访问,详情参考天翼云官网-SDK接入概述。在调用前SDK,需要已知以下参数:

          1、云日志服务访问地址。详情请查看访问地址(Endpoint)。

          2、key凭证:accessKey和secretKey 。详情请查看如何获取访问密钥(AK/SK)。

          3、日志项目编码:logProject,在使用SDK前,需要确保您有至少一个已经存在的日志项目,日志项目就是您要将日志上传到的地方。

          4、日志单元编码:logUnit,在使用SDK前,需要确保日志项目中有至少一个已经存在的日志单元。

          参数参数类型描述是否必须
          endpointstring域名是
          accessKeystringAccessKey,简称ak是
          secretKeystringSecretKey ,简称sk是
          logProjectstring日志项目编码是
          logUnitstring日志单元编码是

          目前通过SDK将日志上传到云日志服务有两种上传形式:同步上传和异步批量上传。

          同步上传:当调用日志上传接口时,sdk会立即进行http请求调用,并返回发送结果。这种方式结构简单,可用于发送频率不高的场景。

          异步批量上传:当调用日志上传接口时,后台线程会将日志进行累积,当达到发送条件时,会进行一次合并发送。对于需要频繁调用发送接口的场景,这种方式性能更卓越,更高效。

          示例代码:同步上传

          int main(int argc, char **argv) {
              string ak = "your accessKey";
              string sk = "your secretKey";
              string logProject = "log project Code";
              string logUnit = "log unit Code";
          string endpoint = "endpoint";
          
          vector<logitem> logItems;
          &nbsp; &nbsp; &nbsp;int64_t logTimestamp = GetCurrentTimeStamp(3);
          &nbsp; &nbsp; &nbsp;string oriMessage = "c++ sdk test oriMessage";
          &nbsp; &nbsp; &nbsp;map<std::string, boost::any=""> contents;
          &nbsp; &nbsp; &nbsp;map<std::string, boost::any=""> labels;
          &nbsp; &nbsp; &nbsp;contents["level"] = string("error");
          &nbsp; &nbsp; &nbsp;contents["unit_id"] = 3.1415926;
          &nbsp; &nbsp; &nbsp;labels["user_tag"] = string("string");
          
          &nbsp; &nbsp; &nbsp;LogItem logItem;
          &nbsp; &nbsp; &nbsp;logItem.logTimestamp = logTimestamp;
          &nbsp; &nbsp; &nbsp;logItem.oriMessage = oriMessage;
          &nbsp; &nbsp; &nbsp;logItem.contents = contents;
          &nbsp; &nbsp; &nbsp;logItem.labels = labels;
          &nbsp; &nbsp; &nbsp;logItems.push_back(logItem);
            
              try {
                  Client *client = new Client(endpoint, ak, sk,logProject);
                  for (int i = 0; i &lt; 100; i++) {    //发送了100次
                      LogResponse logResponse = client-&gt;PutLogs(logProject, logUnit, logItems);
                      cout &lt;&lt; logResponse.statusCode &lt;&lt; ":" &lt;&lt; logResponse.message &lt;&lt; ":" &lt;&lt; logResponse.error &lt;&lt; endl;
                  }
              } catch (LOGException &amp;e) {
                  cout &lt;&lt; e.GetExceptionErrorCode() &lt;&lt; ":" &lt;&lt; e.GetExceptionMessage() &lt;&lt; endl;
          }
          }

          示例代码:异步批量上传

          int main(int argc, char **argv) {
              string ak = "your accessKey";
              string sk = "your secretKey";
              string logProject = "log project Code";
              string logUnit = "log unit Code";
          string endpoint = "endpoint";
          
          vector<logitem> logItems;
          &nbsp; &nbsp; &nbsp;int64_t logTimestamp = GetCurrentTimeStamp(3);
          &nbsp; &nbsp; &nbsp;string oriMessage = "c++ sdk test oriMessage";
          &nbsp; &nbsp; &nbsp;map<std::string, boost::any=""> contents;
          &nbsp; &nbsp; &nbsp;map<std::string, boost::any=""> labels;
          &nbsp; &nbsp; &nbsp;contents["level"] = string("error");
          &nbsp; &nbsp; &nbsp;contents["unit_id"] = 3.1415926;
          &nbsp; &nbsp; &nbsp;labels["user_tag"] = string("string");
          &nbsp; &nbsp; &nbsp;LogItem logItem;
          &nbsp; &nbsp; &nbsp;logItem.logTimestamp = logTimestamp;
          &nbsp; &nbsp; &nbsp;logItem.oriMessage = oriMessage;
          &nbsp; &nbsp; &nbsp;logItem.contents = contents;
          &nbsp; &nbsp; &nbsp;logItem.labels = labels;
          &nbsp; &nbsp; &nbsp;logItems.push_back(logItem);
            
             try{
          &nbsp; &nbsp; &nbsp; &nbsp; ProducerConfig producerConfig = ProducerConfig(); &nbsp;//使用默认producer配置
          &nbsp; &nbsp; &nbsp; &nbsp; ClientConfig clientConfig(endpoint, ak, sk, logProject);
          
          &nbsp; &nbsp; &nbsp; &nbsp; Client *client = &nbsp;createClient(clientConfig); 
          &nbsp; &nbsp; &nbsp; &nbsp; map<string, client="" *=""> clientPool; &nbsp; &nbsp;//可使用不同client配置,生成多个client
          &nbsp; &nbsp; &nbsp; &nbsp; clientPool.insert(make_pair(client-&gt;GetLogProject(), client));
          &nbsp; &nbsp; &nbsp; &nbsp; IoWorker ioWorker(clientPool, producerConfig.getMaxWorkerCount()); &nbsp;  
          &nbsp; &nbsp; &nbsp; &nbsp; LogAccumulator logAccumulator(producerConfig, ioWorker); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
          &nbsp; &nbsp; &nbsp; &nbsp; Mover mover(logAccumulator, ioWorker, producerConfig.getLingerMs()); &nbsp;
          &nbsp; &nbsp; &nbsp; &nbsp; Producer producer(producerConfig, ioWorker, logAccumulator, mover); &nbsp; 
          &nbsp; &nbsp; &nbsp; &nbsp; producer.start(); &nbsp; 
          &nbsp; &nbsp; &nbsp; &nbsp; for (int i=0;i&lt;1000;i++){
          &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; producer.sendLogsCallback(logProject,logUnit,logItems);
          &nbsp; &nbsp; &nbsp; &nbsp; }
          &nbsp; &nbsp; &nbsp; &nbsp; std::this_thread::sleep_for(std::chrono::milliseconds(3000));
          &nbsp; &nbsp; &nbsp; &nbsp; producer.safeClose();
          }catch (exception &amp;e){
          &nbsp; &nbsp; &nbsp; &nbsp; cout&lt;<e.what()<<endl;  =""  }}="" ```="" #="" 4.="" **服务代码示例**-同步上传="" ##="" 4.1.="" **关于client的操作**="" ###="" 4.1.1.="" **new="" client()**="" 此操作是初始化client。用户需要配置至少3个关键的参数才够初始化client。初始化client之后,其包含的配置信息如下:="" |="" 参数="" 参数类型="" 描述="" 是否必须="" --------------="" ----------="" -------------------------="" --------="" endpoint="" string="" 域名="" 是="" accesskey="" accesskey,简称ak="" secretkey="" ,简称sk="" logproject="" 日志单元编码="" useragent="" 使用的sdk信息标识="" 否="" requesttimeout="" int="" http请求超时时间,默认30s="" compresstype="" 日志压缩算法,默认“lz4”="" securitytoken="" tokeninfo*="" 获取的token信息="" httpcurl="" curl*="" 定义的curl="" ,用于http请求="" 示例代码:初始化client配置="" client="" *client="new" client(endpoint,="" ak,="" sk,logproject);="" 或者="" clientconfig="" clientconfig(endpoint,="" sk,="" logproject);="" 4.2.="" **关于**临时凭证token的操作="" 4.2.1.="" **settokenbyapi()**="" 此操作是为client注入token信息,这一步需要使用ak和sk信息换取临时凭证tokeninfo,其中包含了token随机串和过期时间两个参数。这一步需要去访问ctiam的api接口,调用api接口,传入ak="" sk="" endpoint信息,返回token信息。="" tokeninfo信息如下:="" 类型="" ------="" --------------------="" token="" 随机串="" expiretime="" int64="" 过期时间,默认30分钟="" 获取tokeninfo这一步在client="" 初始化时会自动调用。用户默认可以不用进行这一步操作。="" 示例代码:为client注入token信息="" this-="">SetTokenByApi();

          4.3. 关于Log的操作

          4.3.1. logItems.push_back(logItem)

          此操作用于生成待上传的日志,日志上传只能上传LogItem格式的日志,logItems是一个vector类型,里面包含若干条LogItem日志,格式如下:

          参数类型描述是否必须
          logItemsvectorlogItemLogItem格式的vector数组,将多份日志组合起来发送是

          LogItem类型的日志格式如下如下。

          参数类型描述是否必须
          logTimestampint时间戳,单位纳秒是
          originMesssagestring原始日志内容是
          contentsmap<string,any>日志内容,分词后的内容,可用于索引否
          labelsmap<string,any>自定义标签否

          注意:其中Contents和Labels的key的长度不超过64字符,仅支持数字、字母、下划线、连字符(-)、点(.),且必须以字母开头。value类型最好使用字符串(string)和数字类型(int,double),其他类型建议先转为字符串类型,并且value值不能为空或空字符串。

          示例代码:组装生成10条日志

          vector<logitem> logItems;
          for (int k = 0; k &lt; 10; k++) {
          &nbsp; &nbsp; &nbsp;int64_t logTimestamp = GetCurrentTimeStamp(3);
          &nbsp; &nbsp; &nbsp;string oriMessage = "c++ sdk test oriMessage";
          &nbsp; &nbsp; &nbsp;map<std::string, boost::any=""> contents;
          &nbsp; &nbsp; &nbsp;map<std::string, boost::any=""> labels;
          &nbsp; &nbsp; &nbsp;contents["level"] = string("error");
          &nbsp; &nbsp; &nbsp;contents["unit_id"] = 3.1415926;
          &nbsp; &nbsp; &nbsp;labels["user_tag"] = string("string");
          &nbsp; &nbsp; &nbsp;LogItem logItem;
          &nbsp; &nbsp; &nbsp;
               logItem.logTimestamp = logTimestamp;
               logItem.oriMessage = oriMessage;
               logItem.contents = contents;
               logItem.labels = labels;
               logItems.push_back(logItem);
          }

          4.4. 关于日志上传的操作

          4.4.1. PutLogs()

          此操作用于日志上传服务,需要传入的参数有三个,分别是logProject(日志项目编码),logUnit(日志单元编码),logItems(要上传的日志)。

          参数类型描述是否必须
          logProjectstring日志项目编码是
          logUnitstring日志单元编码是
          logItemsvector日志信息是

          示例代码:上传日志

          LogResponse logResponse = client-&gt;PutLogs(logProject, logUnit, logItems);
          cout&lt;<logresponse.statuscaode<<":"<<logresponse.message<<":"<<logresponse.error<<endl; ```="" logresponse="" 是logresponse="" 格式的返回响应体,如下表格式:="" |="" 参数="" 类型="" 描述="" 示例="" ----------="" ------="" ---------------------------------------------------="" -------="" statuscode="" int="" 返回码,取值范围:0:-正常、-1:严重错误,其他自定义="" message="" string="" 状态描述="" success="" error="" 参考错误编码列表="" 日志服务相关错误编码(部分):="" ---------="" -----------------------------------------="" -1="" lts_8000="" 请求失败,请稍候重试,或提交工单反馈="" lts_8001="" 内容不合法,无法解析="" lts_8004="" 日志内容包含的日志必须小于[x]="" mb和[y]条="" lts_8006="" 日志内容解压失败="" lts_8007="" token失效,请重新获取="" lts_8009="" 无云日志服务产品实例,请先开通云日志服务="" lts_8010="" 日志项目不存在="" lts_8011="" 日志单元不存在="" lts_8013="" 在1个日志项目下,写入流量最大限制:200mb="" s="" lts_8014="" 在1个日志项目下,写入次数最大限制:1000次="" lts_8015="" 在1个日志单元下,写入流量最大限制:100mb="" lts_8016="" 在1个日志单元下,写入次数最大限制:500次="" lts_18000="" 调用itiam的接口失败="" #="" 5.="" **服务代码-异步批量上传**="" 异步批量上传是为了解决同步上传无法高频异步发送等问题所增加的模块。原理是会开启多个线程,当调用日志发送接口后,会立刻返回,而内部的线程会将日志数据缓存合并,最后进行批量发送。="" ##="" 5.1.="" **关于producer操作**="" ###="" 5.1.1.="" **producer**config()="" 此操作是初始化producer配置,producer可以看作是一个启动器,内部封装了异步线程的初始化、启动和关闭等功能,只需要对producer进行操作,即可安全便捷地控制这些异步的线程。使用这份producerconfig配置去初始化一个producer。="" 使用默认参数="" producerconfig="" 自定义参数="" producerconfig.setlingerms(2000);="" producerconfig.setmaxbatchcount(4096);="" ...="" producerconfig内的属性是异步操作中的线程所需要的参数,如果不设置参数,则初始化的时候会使用默认的参数,默认参数如下所示:="" 默认值="" -----------------="" ----="" -------------------------="" max_worker_count_="" 线程数="" 4="" max_batch_size_="" 每批日志大小,最大值5mb="" 512kb="" max_batch_count_="" 每批日志条数,最大值40960="" 4096="" linger_ms_="" 定时器等待时间="" 2000="" 5.2.="" **关于异步批量日志上传操作**="" 5.2.1.="" **sendlogs()**="" 此操作是将日志发送到后台的日志累加器队列中,然后立刻返回。累加器的状态达到可发送条件时(日志量达到阈值或者等待时间达到阈值),后台任务的线程将里面的日志进行打包批量发送,参数如下:="" 是否必须="" ----------------="" -----------------------="" ------------------------------------------------="" --------="" logproject="" 日志项目编码="" 是="" logunit="" 日志单元编码="" logitem="" logitems="" vector<logitem=""> | 待上传的日志,可以是单条,也可以是多条(支持重载) | 是       |

          producer.sendLogs(logProject, logUnit, logItem);

          
          sendLogs()方法有很多重载方法,可以满足多种类型的发送,既可以发送单条日志,也可以发送多条日志,同时也可以根据需求是否需要结果返回值。类型如下:

          sendLogs(string logProject,string logUnit,LogItem &logItems); sendLogs(string logProject,string logUnit,vector &logItems); sendLogsCallback(string logProject,string logUnit,LogItem &logItems); sendLogsCallback(string logProject,string logUnit,vector &logItems);

          
          ### 5.2.2. **onCallback()**
          
          此操作是为线程注册回调函数,异步非阻塞获取返回结果。如果您想自定义回调函数,可以修改onCallback()函数。onCallback() 函数位于ioWorker.cpp 内。

          void onCallback(LogResponse &response, int logsize){     std::cout << "statusCode:" << response.statusCode << ", message:" << response.message << ", error:" << response.error << ", count:" << logsize << std::endl; }

          
          ### 5.2.3. **safeClose()**
          
          此操作是用于关闭producer。当不再需要发送数据或当前进程即将终止时,关闭producer是必要的步骤,以确保producer中缓存的所有数据都能得到妥善处理。当调用时,异步线程会停止接收数据,然后把所有缓存数据放进线程发送上传,等待所有线程任务结束后停止任务。

          producer.safeClose();

          </logitem></logitem></logresponse.statuscaode<<":"<<logresponse.message<<":"<<logresponse.error<<endl;></logitem></std::string,></std::string,></logitem></string,any></string,any></logitem></e.what()<<endl;></string,></std::string,></std::string,></logitem></std::string,></std::string,></logitem>
          文档反馈

          建议您登录后反馈,可在建议与反馈里查看问题处理进度

          鼠标选中文档,精准反馈问题

          选中存在疑惑的内容,即可快速反馈问题,我们会跟进处理

          知道了

          上一篇 :  云日志服务Python SDK
          下一篇 :  云日志服务Log4j2 SDK
          搜索 关闭
          ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
          公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
          备案 京公网安备11010802043424号 京ICP备 2021034386号
          ©2025天翼云科技有限公司版权所有
          京ICP备 2021034386号
          备案 京公网安备11010802043424号
          增值电信业务经营许可证A2.B1.B2-20090001
          用户协议 隐私政策 法律声明