Git Product home page Git Product logo

aliyun-log-c-sdk's Introduction

日志服务C Producer是用纯C编写的日志采集客户端,提供更加精简的环境依赖以及更低的资源占用,试用于各类嵌入式/智能设备的日志采集。

功能特点

  • 异步
    • 异步写入,客户端线程无阻塞
  • 聚合&压缩 上传
    • 支持按超时时间、日志数、日志size聚合数据发送
    • 支持lz4压缩
  • 支持上下文查询
    • 同一个客户端产生的日志在同一上下文中,支持查看某条日志前后相关日志
  • 并发发送
    • 支持可配置的线程池发送
  • 缓存
    • 支持缓存上线可设置
    • 超过上限后日志写入失败
  • 自定义标识
    • 日志上传时默认会带上ip
    • 支持设置自定义tag、topic

功能优势

  • 客户端高并发写入:可配置的发送线程池,支持每秒数十万条日志写入,详情参见性能测试
  • 低资源消耗:每秒20W日志写入只消耗30% CPU;同时在低性能硬件(例如树莓派)上,每秒产生100条日志对资源基本无影响。详情参见性能测试
  • 客户端日志不落盘:数据产生后直接通过网络发往服务端。
  • 客户端计算与 I/O 逻辑分离:日志异步输出,不阻塞工作线程。
  • 可靠退出:程序退出时,会调用接口将日志持久化,待下次应用启动时将数据发送,保证数据可靠性。详情参见程序可靠退出方案

在以上场景中,C Producer 会简化您程序开发的步骤,您无需关心日志采集细节实现、也不用担心日志采集会影响您的业务正常运行,大大降低数据采集门槛。

与1.0版本(v1分支) C Producer对比

功能对比

相比1.0版本 C Producer,仅缺少以下功能:

  1. 同一Producer只支持单个Client,不支持多Client设置
  2. 不支持发送优先级设置
  3. 不支持JSON方式的配置文件
  4. 不提供日志相关宏定义包装
  5. 不支持本地调试功能

性能对比

性能相对1.0版本 C Producer有30%以上提升。

资源占用对比

资源占用相比1.0版本 C Producer大大降低(详细请参考性能测试):

  • 除去libcurl占用,运行期间内存占用80KB左右。
  • 编译后的动态库仅有65KB(strip后)

分支选择

C Producer根据不同的设备类型和使用场景做了非常多的定制工作,因此分为几个分支来支持不同的场景,请根据实际需求选择。

分支 状态 功能优势 建议使用场景
master 可用 原lite分支,相比v1(1.0f)版本依赖、资源占用、性能等有大幅度提升,是目前SLS性能最强的Producer,推荐使用 Linux服务器、嵌入式Linux
live 可用 主要功能和master版本一致,增加最多平台的编译支持,包括Windows、Mac、Android、IOS等 非master支持的环境
bricks 可用 极致精简版本,binary和内存占用极低,但是功能非常弱,建议在资源非常受限的场景中使用 资源占用在10KB以内的场景,例如RTOS
persistent 可用 相比master增加本地缓存功能,目前用于Android、IOS移动端版本的Native实现,本地缓存功能开启后只能单线程发送,不建议服务端使用 建议直接使用Android、IOS官方SDK
  • 注意:除以上分支外,不建议使用其他分支

安装方法

下载Producer代码

您可以使用如下命令获取代码:

git clone https://github.com/aliyun/aliyun-log-c-sdk.git

环境依赖

需要安装openssl C Producer使用curl进行网络操作,您需要确认这些库已经安装,并且将它们的头文件目录和库文件目录都加入到了项目中。

libcurl下载以及安装

libcurl建议 7.49.0 及以上版本

请从这里下载,并参考libcurl 安装指南安装。典型的安装方式如下:

    ./configure
    make
    make install
  • 注意:
  • 执行./configure时默认是配置安装目录为/usr/local/,如果需要指定安装目录,请使用 ./configure --prefix=/your/install/path/

LOG C SDK的安装

安装时请在cmake命令中指定第三方库头文件以及库文件的路径,典型的编译命令如下:

    cmake .
    make
    make install
  • 注意:
  • 执行cmake . 时默认会到/usr/local/下面去寻找curl的头文件和库文件。
  • 默认编译是Release类型,可以指定以下几种编译类型: Debug, Release, RelWithDebInfo和MinSizeRel,如果要使用Debug类型编译,则执行cmake . -DCMAKE_BUILD_TYPE=Debug
  • 如果您在安装curl时指定了安装目录,则需要在执行cmake时指定这些库的路径,比如:
   cmake . -DCURL_INCLUDE_DIR=/usr/local/include/curl/ -DCURL_LIBRARY=/usr/local/lib/libcurl.a
  • 如果要指定安装目录,则需要在cmake时增加: -DCMAKE_INSTALL_PREFIX=/your/install/path/usr/local/

使用

一个应用可创建多个producer,每个producer可单独配置目的地址、缓存大小、发送线程数、自定义标识、topic等信息。

配置参数

所有参数通过log_producer_config结构设置,支持设置的参数如下:

参数 说明 取值
project 日志服务project string
logstore 日志服务logstore string
endpoint 日志服务endpoint string,以http:开头
access_id 云账号 access id string
access_key 云账号 access key string
topic topic名 string,非必须设置。
add_tag 自定义的tag key value 模式,非必须设置。
packet_timeout 指定被缓存日志的发送超时时间,如果缓存超时,则会被立即发送。 整数形式,单位为毫秒。默认为3000。
packet_log_count 指定每个缓存的日志包中包含日志数量的最大值。 整数形式,取值为1~4096。默认2048。
packet_log_bytes 指定每个缓存的日志包的大小上限。 整数形式,取值为1~5242880,单位为字节。默认为 3 * 1024 * 1024。
max_buffer_limit 指定单个Producer Client实例可以使用的内存的上限。 整数形式,单位为字节。默认为64 * 1024 * 1024。
log_queue_size 缓存队列的最大长度,默认通过 max_buffer_limit/packet_log_bytes + 10 自动计算,可以手动设置以获得更大的队列大小。 整数形式,支持32-128000。默认值max_buffer_limit/packet_log_bytes + 10。
send_thread_count 指定发送线程数量,用于发送数据到日志服务。 整数形式,默认0,为0时发送与内部Flush公用一个线程,若您每秒日志发送不超过100条,无需设置此参数。
net_interface 网络发送绑定的网卡名 字符串,为空时表示自动选择可用网卡
connect_timeout_sec 网络连接超时时间 整数,单位秒,默认为10
send_timeout_sec 日志发送超时时间 整数,单位秒,默认为15
destroy_flusher_wait_sec flusher线程销毁最大等待时间 整数,单位秒,默认为1
destroy_sender_wait_sec sender线程池销毁最大等待时间 整数,单位秒,默认为1
compress_type 压缩类型 枚举值,默认为lz4。

相关限制

  • C Producer销毁时,会尽可能将缓存中的数据发送出去,若您不对未发送的数据进行处理,则有一定概率丢失数据。处理方法参见程序可靠退出方案
  • C Producer销毁的最长时间可能为 send_timeout_sec + destroy_flusher_wait_sec + destroy_sender_wait_sec

样例代码

请参考sample目录中的log_producer_sample.c

C-Producer系列介绍

image.png

关于C Producer Library的更多内容参见目录:https://yq.aliyun.com/articles/304602 目前针对不同的环境(例如网络服务器、ARM设备、以及RTOS等设备)从大到小我们提供了3种方案:

image.png | left | 827x368

同时对于Producer我们进行了一系列的性能和资源优化,确保数据采集可以“塞”到任何IOT设备上,其中C Producer Bricks版本更是达到了极致的内存占用(库体积13KB,运行内存4KB以内)。

image.png | left | 827x171

使用C Producer系列的客户有: 百万日活的天猫精灵、小朋友们最爱的故事机火火兔、 遍布全球的码牛、钉钉路由器、 兼容多平台的视频播放器、 实时传输帧图像的摄像头等。

这些智能SDK每天DAU超百万,遍布在全球各地的设备上,一天传输百TB数据。关于C Producer Library 的细节可以参考这篇文章: 智能设备日志利器:嵌入式日志客户端(C Producer)发布

image.png | left | 827x264

数据采集全球加速

IOT设备作为典型的“端”设备,通常都会部署在全国、甚至全球各地,部署区域的网络条件难以保证,这会对数据采集产生一个巨大的问题:数据采集受网络质量影响,可靠性难以保证。

针对以上问题,日志服务联合阿里云CDN推出了一款全球数据上传自动加速方案:“基于阿里云CDN硬件资源,全球数据就近接入边缘节点,通过内部高速通道路由至LogHub,大大降低网络延迟和抖动 ”。 该方案有如下特点:

  • 全网边缘节点覆盖:全球1000+节点,国内700+节点,分布60多个国家和地区,覆盖六大洲
  • 智能路由技术:实时探测网络质量,自动根据运营商、网络等状况选择最近接入
  • 传输协议优化:CDN节点之间走私有协议、高效安全
  • 使用便捷:只需1分钟即可开通加速服务,只需切换到专属加速域名即可获得加速效果

image | left

在我们的日志上传基准测试中,全球7个区域对比整体延时下降50%,在中东,欧洲、澳洲和新加坡等效果明显。除了平均延时下降外,整体稳定性也有较大提升(参见最下图,几乎没有任何抖动,而且超时请求基本为0)。确保无论在全球的何时何地,只要访问这个加速域名,就能够高效、便捷将数据采集到期望Region内。

关于全球采集加速的更多内容,可参考我们的文章:数据采集新形态-全球加速

image.png | left | 827x396

image.png | left | 827x222

aliyun-log-c-sdk's People

Contributors

cnbleu avatar crimson-gao avatar leeyiw avatar shabicheng avatar wangjwchn avatar zhaowq32 avatar zzboy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aliyun-log-c-sdk's Issues

lite版本编译安装时还有Json.h安装

1、编译好后,make install 出现以下错误。

main@ubuntu:~/workspace/Tbox/TBOX_EC20/ql-ol-sdk/ecpark-app/extlib/aliyun-log-c-sdk$ make install
[ 50%] Built target log_c_sdk
[100%] Built target log_c_sdk_static
Install the project...
-- Install configuration: ""
-- Installing: /home/main/workspace/Tbox/TBOX_EC20/ql-ol-sdk/ecpark-app/extlib/Release/lib/liblog_c_sdk.so.2.0.0
-- Up-to-date: /home/main/workspace/Tbox/TBOX_EC20/ql-ol-sdk/ecpark-app/extlib/Release/lib/liblog_c_sdk.so
-- Installing: /home/main/workspace/Tbox/TBOX_EC20/ql-ol-sdk/ecpark-app/extlib/Release/lib/liblog_c_sdk_static.a
CMake Error at cmake_install.cmake:69 (FILE):
file INSTALL cannot find
"/home/main/workspace/Tbox/TBOX_EC20/ql-ol-sdk/ecpark-app/extlib/aliyun-log-c-sdk/src/cJSON.h".

make: *** [install] Error 1

2、cmake_install.cmake做了以下修改才可以编译安装:
FILE(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/include/log_c_sdk" TYPE FILE FILES
# "/home/main/workspace/Tbox/TBOX_EC20/ql-ol-sdk/ecpark-app/extlib/aliyun-log-c-sdk/src/cJSON.h"
"/home/main/workspace/Tbox/TBOX_EC20/ql-ol-sdk/ecpark-app/extlib/aliyun-log-c-sdk/src/lz4.h"
#"/home/main/workspace/Tbox/TBOX_EC20/ql-ol-sdk/ecpark-app/extlib/aliyun-log-c-sdk/src/aos_log.h"
"/home/main/workspace/Tbox/TBOX_EC20/ql-ol-sdk/ecpark-app/extlib/aliyun-log-c-sdk/src/log_define.h"
"/home/main/workspace/Tbox/TBOX_EC20/ql-ol-sdk/ecpark-app/extlib/aliyun-log-c-sdk/src/log_util.h"
"/home/main/workspace/Tbox/TBOX_EC20/ql-ol-sdk/ecpark-app/extlib/aliyun-log-c-sdk/src/log_api.h"
# "/home/main/workspace/Tbox/TBOX_EC20/ql-ol-sdk/ecpark-app/extlib/aliyun-log-c-sdk/src/log_http_cont.h"
"/home/main/workspace/Tbox/TBOX_EC20/ql-ol-sdk/ecpark-app/extlib/aliyun-log-c-sdk/src/log_builder.h"
#"/home/main/workspace/Tbox/TBOX_EC20/ql-ol-sdk/ecpark-app/extlib/aliyun-log-c-sdk/src/protobuf-c.h"
"/home/main/workspace/Tbox/TBOX_EC20/ql-ol-sdk/ecpark-app/extlib/aliyun-log-c-sdk/src/log_logs.pb-c.h"
"/home/main/workspace/Tbox/TBOX_EC20/ql-ol-sdk/ecpark-app/extlib/aliyun-log-c-sdk/src/log_producer_client.h"
"/home/main/workspace/Tbox/TBOX_EC20/ql-ol-sdk/ecpark-app/extlib/aliyun-log-c-sdk/src/log_producer_common.h"
"/home/main/workspace/Tbox/TBOX_EC20/ql-ol-sdk/ecpark-app/extlib/aliyun-log-c-sdk/src/log_producer_config.h"
)

3、想知道这样修改是否有问题?

CRYPTO_LIBRARY nofound on raspberry pi

cmake 的时候报错
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CRYPTO_LIBRARY
linked by target "log_producer_sample" in directory /home/pi/lite/aliyun-log-c-sdk-lite/sample
linked by target "log_post_logs_sample" in directory /home/pi/lite/aliyun-log-c-sdk-lite/sample
linked by target "log_producer_benchmark" in directory /home/pi/lite/aliyun-log-c-sdk-lite/sample
linked by target "video_frame_producer_sample" in directory /home/pi/lite/aliyun-log-c-sdk-lite/sample
SSL_LIBRARY
linked by target "log_producer_sample" in directory /home/pi/lite/aliyun-log-c-sdk-lite/sample
linked by target "log_post_logs_sample" in directory /home/pi/lite/aliyun-log-c-sdk-lite/sample
linked by target "log_producer_benchmark" in directory /home/pi/lite/aliyun-log-c-sdk-lite/sample
linked by target "video_frame_producer_sample" in directory /home/pi/lite/aliyun-log-c-sdk-lite/sample

-- Configuring incomplete, errors occurred!

有大佬知道如何处理吗?

求助:如何在客户端rust代码中使用sls日志sdk?

如题, @shabicheng 大佬,问下,有没有提供rust版本的sls sdk?找了一波没找到,然后参考了android sdk,发现本质上也是通过jni调用c sdk。rust理论上也是可以调用c sdk。我需要使用的平台主要是桌面端,包括win、mac、linux。想问下,如何生成这些平台的.a文件?

log_producer_client_add_raw_log_buffer之后log_producer_client_add_log日志发送会返回LOG_PRODUCER_DROP_ERROR

如标题,发现采用官方提供的方法发送存储的上一次运行未发送成功的数据后,正常发送会返回buffer满的错误,追踪源码发现,producer_manager totalBufferSize在log_producer_client_add_raw_log_buffer之后,变成了很大的值,因为发送完成会使totalBufferSize - sent buffer len,但是并未在发送前增加totalBufferSize的值,使得无符号值变负溢出。需要在发送前增加totalBufferSize的值。此问题只针对log_producer_client_add_raw_log_buffer逻辑
log_producer_result log_producer_manager_send_raw_buffer(log_producer_manager * producer_manager, size_t log_bytes, size_t compressed_bytes, const unsigned char * raw_buffer)
{
// pack lz4_log_buf
lz4_log_buf* lz4_buf = (lz4_log_buf*)malloc(sizeof(lz4_log_buf) + compressed_bytes);
lz4_buf->length = compressed_bytes;
lz4_buf->raw_length = log_bytes;
memcpy(lz4_buf->data, raw_buffer, compressed_bytes);
log_producer_send_param * send_param = create_log_producer_send_param(producer_manager->producer_config, producer_manager, lz4_buf, time(NULL));
//fix totalBufferSize error bug, totalBufferSize will sub buf length after send done
producer_manager->totalBufferSize += lz4_buf->length;
return log_producer_send_data(send_param);
}

add_log_key_value参数k_len、v_len传反了

void add_log_key_value(log_group_builder* bder,char* k,size_t v_len,char* v,size_t k_len)
log_builder.c 85 行
k用的是v_len
v用的是k_len
另外用CMakeList.txt做build有问题,build不通。
还有日志服务说有Go的API,没找到,现在用cgo调的C API,希望提供Go的。

curl库协议支持问题

交叉编译进板子,运行提示如下:
put logs failed
[2017-12-25 20:25:37.340] [ERROR] [1024] [/home/work_sdc1/tenda3/F3_XS/F3V3.0_AC6V2.0_SVN6883/cbb/xs_project/lib/aliyun-log-c-sdk-master/src/aos_transport.c:424] transport failure curl code:1 error:Unsupported protocol
-996
HttpIoError
Unsupported protocol

报不支持的协议
curl -V查看了下所支持的协议如下:
/var # ./curl -V
curl 7.57.0 (mips-unknown-linux-gnu) libcurl/7.57.0
Release-Date: 2017-11-29
Protocols: dict file ftp gopher http imap pop3 rtsp smtp telnet tftp
Features: AsynchDNS IPv6 Largefile UnixSockets

请问:需要curl库支持哪种协议?https协议吗

命名冲突

log_inner_include.h头文件里面定义的宏

#define __in   // 参数输入
#define __out  // 参数输出

和gcc拓展库<ext/pb_ds/assoc_container.hpp>冲突,导致编译不了

debug模式下,启动的时候有一定概率会crash

原因是:debug模式启动起来的时候会做一次logrotate,如果时间太长,后台刷新进程会crash
crash点:

Thread 1 (Thread 0x7fdb50cfb700 (LWP 21)):
#0 0x00007fdb576eebd0 in pthread_mutex_lock () from /usr/lib64/libpthread.so.0
#1 0x00000000006af0b7 in _try_flush_loggroup (producer_manager=0x9ca4f8)
at aliyun-log-c-sdk/src/log_producer_manager.c:74

推荐使用master分支还是使用releaese里的代码?

你好:
有2个问题想问下:
1、推荐使用master分支还是使用releaese里的代码?
2、android Android.mk的编译方式没有将对应架构的curl的目录传给编译器,会默认使用系统x86架构的头文件么?会有啥影响么?

底层时间的获取,建议给出接口

SDK底层获取时间是用的time(NULL)接口,对于没有时区概念的IOT设备,会将本地的time接口设置成当前CST时间,此时调用SDK会提示时间不对。无奈只得修改了SDK源码了

编译错误: error: macro expands to multiple statements [-Werror=multistatement-macros]

gcc --version
gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0

编译错误:

In file included from /work/soft/aliyun-log-c-sdk-0.1.2/src/aos_util.h:5,
                 from /work/soft/aliyun-log-c-sdk-0.1.2/src/log_http_cont.h:12,
                 from /work/soft/aliyun-log-c-sdk-0.1.2/src/log_http_cont.c:9:
/work/soft/aliyun-log-c-sdk-0.1.2/src/log_http_cont.c: In function 'log_create_http_cont':
/work/soft/aliyun-log-c-sdk-0.1.2/src/aos_string.h:16:5: error: macro expands to multiple statements [-Werror=multistatement-macros]
   16 |     (str)->len = (int)strlen(text); (str)->data = (char *) text
      |     ^
/work/soft/aliyun-log-c-sdk-0.1.2/src/log_http_cont.c:128:9: note: in expansion of macro 'aos_str_set'
  128 |         aos_str_set(&(_sts_token), stsToken);
      |         ^~~~~~~~~~~
/work/soft/aliyun-log-c-sdk-0.1.2/src/log_http_cont.c:127:5: note: some parts of macro expansion are not guarded by this 'if' clause
  127 |     if(stsToken != NULL)
      |     ^~
In file included from /work/soft/aliyun-log-c-sdk-0.1.2/src/aos_util.h:5,
                 from /work/soft/aliyun-log-c-sdk-0.1.2/src/log_http_cont.h:12,
                 from /work/soft/aliyun-log-c-sdk-0.1.2/src/log_http_cont.c:9:
/work/soft/aliyun-log-c-sdk-0.1.2/src/log_http_cont.c: In function 'log_create_http_cont_with_lz4_data':
/work/soft/aliyun-log-c-sdk-0.1.2/src/aos_string.h:16:5: error: macro expands to multiple statements [-Werror=multistatement-macros]
   16 |     (str)->len = (int)strlen(text); (str)->data = (char *) text
      |     ^
/work/soft/aliyun-log-c-sdk-0.1.2/src/log_http_cont.c:197:5: note: in expansion of macro 'aos_str_set'
  197 |     aos_str_set(&(_sts_token), stsToken);
      |     ^~~~~~~~~~~
/work/soft/aliyun-log-c-sdk-0.1.2/src/log_http_cont.c:196:5: note: some parts of macro expansion are not guarded by this 'if' clause
  196 |     if(stsToken != NULL)
      |     ^~

live分支使用ndk-r16b版本,可以单独生成.a和.so库;集成工程已有代码使用libaliyun.a生成工程.so库时报如下错误。

只是将log_producer_sample.c封装为类,去掉main。其他什么也不修改,jni调用。

#include "aliyun/log_api.h"
#include "aliyun/log_producer_config.h"
#include "aliyun/log_producer_client.h"

生成jni接口报如下错误:

D:/Android/android-ndk-r16b/build//../sources/cxx-stl/gnu-libstdc++/4.9/include\thread:235:15: error: expected
      expression
        return __out << "thread::id of a non-executing thread";
                     `^`
D:/Android/android-ndk-r16b/build//../sources/cxx-stl/gnu-libstdc++/4.9/include\thread:237:15: error: expected
      expression
        return __out << __id._M_thread;
                     ^

源代码直接生成.a和.so没有问题。
mk文件内容如下:

LOCAL_PATH := $(call my-dir)/../aliyun
DEPS_LIB_PATH := $(call my-dir)/../../../../deps

include $(CLEAR_VARS)

LOCAL_MODULE := aliyun

LOCAL_MODULE_FILENAME := libaliyun


LOCAL_SRC_FILES := \
	hmac-sha.c \
	inner_log.c \
	log_api.c \
	log_builder.c \
	log_producer_client.c \
	log_producer_common.c \
	log_producer_config.c \
	log_producer_manager.c \
	log_producer_sender.c \
	log_queue.c \
	log_util.c \
	lz4.c \
	md5.c \
	sds.c \
	sha1.c 

LOCAL_C_INCLUDES := $(LOCAL_PATH)

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)

LOCAL_EXPORT_LDLIBS := -llog -landroid

LOCAL_CPPFLAGS += -frtti -fexceptions -std=c++14 
LOCAL_CFLAGS += -ffunction-sections -fdata-sections
LOCAL_LDFLAGS += -Wl,--gc-sections 

LOCAL_STATIC_LIBRARIES += curl_static
LOCAL_STATIC_LIBRARIES += ssl_static
LOCAL_STATIC_LIBRARIES += zlib_static

# 编译生成动态库.so
# include $(BUILD_SHARED_LIBRARY) 

# 编译生产静态库.a
include $(BUILD_STATIC_LIBRARY)

$(call import-add-path,$(DEPS_LIB_PATH))
$(call import-module,curl\android)
$(call import-module,openssl\android)
$(call import-module,zlib\android)

Application如下:

APP_PLATFORM := android-19
APP_OPTIM := release
APP_CFLAGS += -Wall
APP_STL := gnustl_static
APP_ABI := armeabi armeabi-v7a x86 arm64-v8a

APP_CPPFLAGS := -frtti -std=c++14 -fsigned-char
APP_LDFLAGS := -latomic

是否有函数或变量用来检测数据是否发送完成?

当数据未发送完成producer就destroyed时,上报如下错误
result : 10, log bytes : 3675821, compressed bytes : 3685827, request id : , error message : producer is being destroyed, producer has no time to send this buffer out

除了“程序可靠退出方案”方案外,是否有其他函数或变量来检测数据是否发送完成?

因为log_producer_client_add_log()后执行destroy_log_producer()前时间无法预估,发送的数据大小无法预估,当数据量大时设置的时间总会超时。

lite分支上传日志报错

Centos7.2系统,lite分支的库上传日志报错

报错信息:error message: {"errorCode":"RequestTimeExpired","errorMessage":"request timeThu, 15 Oct 2020 00:00:00 GMT has been expired while server time is Thu, 15 Oct 2020 15:13:44 GMT"}

sender线程池销毁最大等待时间---配置不生效

README.md

详细配置

| destroy_flusher_wait_sec | flusher线程销毁最大等待时间 | 整数,单位秒,默认为1 |
| destroy_sender_wait_sec | sender线程池销毁最大等待时间 | 整数,单位秒,默认为1 |

#############################
destroy_log_producer_manager函数使用了destroyFlusherWaitTimeoutSec
destroy_log_producer_sender函数也使用了destroyFlusherWaitTimeoutSec,
本意是使用destroySenderWaitTimeoutSec 吧?

void destroy_log_producer_sender(log_producer_sender * producer_sender, log_producer_config * producer_config)
{
if (producer_sender->thread_pool == NULL)
{
return;
}
// add a thread to flush all data out
apr_thread_pool_thread_max_set(producer_sender->thread_pool, producer_config->sendThreadCount + 1);
int32_t flush_count = producer_config->destroyFlusherWaitTimeoutSec > 0 ? producer_config->destroyFlusherWaitTimeoutSec * 100 : MAX_SENDER_FLUSH_COUNT;
int waitCount = 0;

...........

}

请问能增加对automake的支持么?

我通过后台脚本编译代码来生成给android用的静态库,我搜索了下cmake的跨平台,大多数都是依赖于ide和gradle的,如何直接使用ndk来完成编译呢?

链接动态库时,两个动态库中符号重名的问题

c语言实现的命名比较“普通”导致了引入多个类库时候,和其他类库的函数名重复;编译可以通过,但是实际运行时跑去执行了别的类库中实现,导致segment fault

一个堆栈如下图所示,从hmac_sha1()开始跑到别的类库下实现中了。
希望可以改善,较少这种情况
image

make install error

aliyun-log-c-sdk live 分支,mac os,make install执行报错

[ 41%] Built target log_c_sdk
[ 82%] Built target log_c_sdk_static
[ 87%] Built target log_producer_benchmark
[ 94%] Built target log_post_logs_sample
[100%] Built target log_producer_sample
Install the project...
-- Install configuration: ""
-- Up-to-date: /usr/local/lib/liblog_c_sdk.2.0.0.dylib
-- Up-to-date: /usr/local/lib/liblog_c_sdk.dylib
-- Installing: /usr/local/lib/liblog_c_sdk_static.a
CMake Error at cmake_install.cmake:69 (file):
file INSTALL cannot find
"/Users/xxxxx/Github/sls/aliyun-log-c-sdk/src/cJSON.h": No such file
or directory.

make: *** [install] Error 1

Undefined symbols for architecture x86_64:

我在mac上编译,cmake可以执行成功,
make时,会出现这样的错误,可以帮忙分析是什么原因吗,不能在mac上编译吗
Scanning dependencies of target log_c_sdk
[ 2%] Building C object CMakeFiles/log_c_sdk.dir/src/hmac-sha.o
[ 4%] Building C object CMakeFiles/log_c_sdk.dir/src/inner_log.o
[ 7%] Building C object CMakeFiles/log_c_sdk.dir/src/log_api.o
[ 9%] Building C object CMakeFiles/log_c_sdk.dir/src/log_builder.o
[ 12%] Building C object CMakeFiles/log_c_sdk.dir/src/log_producer_client.o
[ 14%] Building C object CMakeFiles/log_c_sdk.dir/src/log_producer_common.o
[ 17%] Building C object CMakeFiles/log_c_sdk.dir/src/log_producer_config.o
[ 19%] Building C object CMakeFiles/log_c_sdk.dir/src/log_producer_manager.o
[ 21%] Building C object CMakeFiles/log_c_sdk.dir/src/log_producer_sender.o
[ 24%] Building C object CMakeFiles/log_c_sdk.dir/src/log_queue.o
[ 26%] Building C object CMakeFiles/log_c_sdk.dir/src/log_util.o
[ 29%] Building C object CMakeFiles/log_c_sdk.dir/src/lz4.o
[ 31%] Building C object CMakeFiles/log_c_sdk.dir/src/md5.o
[ 34%] Building C object CMakeFiles/log_c_sdk.dir/src/sds.o
[ 36%] Building C object CMakeFiles/log_c_sdk.dir/src/sha1.o
[ 39%] Linking C shared library build/Release/lib/liblog_c_sdk.dylib
Undefined symbols for architecture x86_64:
"_curl_easy_cleanup", referenced from:
_post_logs_from_lz4buf in log_api.o
"_curl_easy_getinfo", referenced from:
_post_logs_from_lz4buf in log_api.o
"_curl_easy_init", referenced from:
_post_logs_from_lz4buf in log_api.o
"_curl_easy_perform", referenced from:
_post_logs_from_lz4buf in log_api.o
"_curl_easy_setopt", referenced from:
_post_logs_from_lz4buf in log_api.o
"_curl_easy_strerror", referenced from:
_sls_log_init in log_api.o
_post_logs_from_lz4buf in log_api.o
"_curl_global_cleanup", referenced from:
_sls_log_destroy in log_api.o
"_curl_global_init", referenced from:
_sls_log_init in log_api.o
"_curl_slist_append", referenced from:
_post_logs_from_lz4buf in log_api.o
"_curl_slist_free_all", referenced from:
_post_logs_from_lz4buf in log_api.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [build/Release/lib/liblog_c_sdk.2.0.0.dylib] Error 1
make[1]: *** [CMakeFiles/log_c_sdk.dir/all] Error 2
make: *** [all] Error 2

mac系统下无法正常编译

lite分支下,cmake正常输出产物后,make命令下,会出现不能正常链接到动态库的问题
cannot link directly with dylib/framework, your binary is not an allowed client of /usr/lib/libcrypto.dylib for architecture x86_64

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.