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前,需要确保日志项目中有至少一个已经存在的日志单元。 参数 参数类型 描述 是否必须 endpoint string 域名 是 accessKey string AccessKey,简称ak 是 secretKey string SecretKey ,简称sk 是 logProject string 日志项目编码 是 logUnit string 日志单元编码 是 目前通过SDK将日志上传到
云日志
服务有两种上传形式:同步上传和异步批量上传,详细信息请参考代码内README
文档。 同步上传:当调用日志上传接口时,sdk会立即进行http请求调用,并返回发送结果。这种方式结构简单,可用于发送频率不高的场景。 异步批量上传:当调用日志上传接口时,后台线程会将日志进行累积,当达到发送条件时,会进行一次合并发送。对于需要频繁调用发送接口的场景,这种方式性能更卓越,更高效。 示例代码:同步上传 cpp 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"; int lognum 10; //每次发送10条日志 vector logItems; for (int k 0; k contents; map labels; contents["level"] string("error"); contents["unitid"] 3.1415926; labels["usertag"] string("string"); LogItem logItem; logItem.logTimestamp logTimestamp; logItem.oriMessage oriMessage; logItem.contents contents; logItem.labels labels; logItems.pushback(logItem); } try { Client client new Client(endpoint, ak, sk); for (int i 0; i PutLogs(logProject, logUnit, logItems); cout logItems; for (int k 0; k contents; map labels; contents["level"] string("error"); contents["unitid"] 3.1415926; labels["usertag"] string("string"); LogItem logItem; logItem.logTimestamp logTimestamp; logItem.oriMessage oriMessage; logItem.contents contents; logItem.labels labels; logItems.pushback(logItem); } try { ProducerConfig producerConfig ProducerConfig(); //使用默认producer配置 ClientConfig clientConfig(endpoint, ak, sk, logProject);//可使用不同client配置,生成多个client,如果希望使用同一个,logProject默认设置为"" 即可 Client client createClient(clientConfig); map clientPool; clientPool.insert(makepair(client>GetLogProject(), client)); IoWorker ioWorker(clientPool, producerConfig.getMaxWorkerCount()); //线程池 LogAccumulator logAccumulator(producerConfig, ioWorker); //日志累加器 Mover mover(logAccumulator, ioWorker, producerConfig.getLingerMs()); //定时器 Producer producer(producerConfig, ioWorker, logAccumulator, mover); //日志发送器 producer.start(); for (int i0;i<5000;i++){ producer.sendLogsCallback(logProject,logUnit,logItems); } std::thisthread::sleepfor(std::chrono::milliseconds(5000)); for (int i 0; i < 5000; i++) { producer.sendLogsCallback(logProject, logUnit, logItems); } std::thisthread::sleepfor(std::chrono::milliseconds(3000)); producer.safeClose(); } catch (exception &e) { cout<