1 Star 0 Fork 1

居然有个高手 / aliyun-log-android-sdk

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

log service android producer

基于aliyun-log-c-sdk ,提供了在Android平台上将日志采集到日志服务的接口。

功能特点

  • 异步
    • 异步写入,客户端线程无阻塞
  • 聚合&压缩 上传
    • 支持按超时时间、日志数、日志size聚合数据发送
    • 支持lz4压缩
  • 多客户端
    • 可同时配置多个客户端,每个客户端可独立配置采集优先级、缓存上限、目的project/logstore、聚合参数等
  • 缓存
    • 支持缓存上限可设置
    • 超过上限后日志写入失败
  • 自定义标识
    • 支持设置自定义tag、topic
  • 断点续传功能
    • 每次发送前会把日志保存到本地的binlog文件,只有发送成功才会删除,保证日志上传At Least Once(配置多个客户端时,不应设置相同持久化文件)
  • 上下文
    • 采集上来的日志,支持查看某条日志的上下文

image.png

性能测试

  • 开启断点续传
发送 条/每秒 cpu占用 内存占用(MB) 上传速(MB/min)
1 <1% 49 0.046
10 2% 53 0.442
100 8% 57 4.393
200 10% 70 7.90
  • 不开启断点续传
发送 条/每秒 cpu占用 内存占用(MB) 上传速(MB/min)
1 <1% 49 0.046
10 2% 58 0.442
100 10% 60 4.393
200 15% 70 7.90

SDK包体积

  • aar包体积

aar包体积.png

  • 引用SDK包前后体积对比

引用SDK包前后体积对比.png

配置说明

环境要求

  • Android版本4.0(API 14)及以上。
  • 必须注册有Aliyun.com用户账户,并开通相应的服务(LOG)。

Gradle配置

jcenter()
implementation 'com.aliyun.openservices:aliyun-log-android-sdk:2.6.2'

混淆配置

-keep class com.aliyun.sls.android.producer.* { *; }
-keep interface com.aliyun.sls.android.producer.* { *; }

Android权限

上传日志需要

<uses-permission android:name="android.permission.INTERNET" />

开启断点续传功能需要有持久化文件的读写权限

创建config

https://help.aliyun.com/document_detail/29064.html

// endpoint前需要加 https://
String endpoint = "project's_endpoint";
String project = "project_name";
String logstore = "logstore_name";
String accesskeyid = "your_accesskey_id";
String accesskeysecret = "your_accesskey_secret";
LogProducerConfig config = new LogProducerConfig(endpoint, project, logstore, accesskeyid, accesskeysecret);
// 指定sts token 创建config,过期之前调用resetSecurityToken重置token
// LogProducerConfig config = new LogProducerConfig(endpoint, project, logstore, accesskeyid, accesskeysecret, securityToken);

配置config

// 设置主题
config.setTopic("test_topic");
// 设置tag信息,此tag会附加在每条日志上
config.addTag("test", "test_topic");
// 每个缓存的日志包的大小上限,取值为1~5242880,单位为字节。默认为1024 * 1024
config.setPacketLogBytes(1024*1024);
// 每个缓存的日志包中包含日志数量的最大值,取值为1~4096,默认为1024
config.setPacketLogCount(1024);
// 被缓存日志的发送超时时间,如果缓存超时,则会被立即发送,单位为毫秒,默认为3000
config.setPacketTimeout(3000);
// 单个Producer Client实例可以使用的内存的上限,超出缓存时add_log接口会立即返回失败
// 默认为64 * 1024 * 1024
config.setMaxBufferLimit(64*1024*1024);
// 发送线程数,默认为1
config.setSendThreadCount(1);

// 1 开启断点续传功能, 0 关闭
// 每次发送前会把日志保存到本地的binlog文件,只有发送成功才会删除,保证日志上传At Least Once
config.setPersistent(0);
// 持久化的文件名,需要保证文件所在的文件夹已创建。配置多个客户端时,不应设置相同文件
config.setPersistentFilePath(getFilesDir() + "/log.dat");
// 是否每次AddLog强制刷新,高可靠性场景建议打开
config.setPersistentForceFlush(1);
// 持久化文件滚动个数,建议设置成10。
config.setPersistentMaxFileCount(10);
// 每个持久化文件的大小,建议设置成1-10M
config.setPersistentMaxFileSize(1024 * 1024);
// 本地最多缓存的日志数,不建议超过1M,通常设置为65536即可
config.setPersistentMaxLogCount(65536);

动态配置

2.6.0版本开始, sdk 新增 endpoint、project、logstore 参数的动态配置。

// 动态更新 endpoint
config.setEndpoint(endpoint);
// 动态更新 logproject
config.setProject(project);
// 动态更新 logstore 
config.setLogstore(logstore);

config其他参数设置说明

参数设置 说明 取值
setTopic topic 字段的值 字符串,默认为空串
addTag tag:xxxx 字符串,默认为空串
setSource source 字段的值 字符串,默认为 Android
setPacketLogBytes 每个缓存的日志包的大小上限 整数,取值为1~5242880,单位为字节。默认为1024 * 1024
setPacketLogCount 每个缓存的日志包中包含日志数量的最大值 整数,取值为1~4096,默认为1024
setPacketTimeout 被缓存日志的发送超时时间,如果缓存超时,则会被立即发送 整数,单位为毫秒,默认为3000
setMaxBufferLimit 单个Producer Client实例可以使用的内存的上限,超出缓存时add_log接口会立即返回失败 整数,默认为1
setSendThreadCount 发送线程数 整数,64 * 1024 * 1024
setPersistent 每次发送前会把日志保存到本地的binlog文件,只有发送成功才会删除,保证日志上传At Least Once 整数,1 开启断点续传功能, 0 关闭
setPersistentFilePath 持久化的文件名,需要保证文件所在的文件夹已创建。配置多个客户端时,不应设置相同文件 字符串,默认为空
setPersistentForceFlush 是否每次AddLog强制刷新,高可靠性场景建议打开 整数,默认为0
setPersistentMaxFileCount 持久化文件滚动个数,建议设置成10 整数,默认为0
setPersistentMaxFileSize 每个持久化文件的大小,建议设置成1-10M 整数,默认为0
setPersistentMaxLogCount 本地最多缓存的日志数,不建议超过1M,通常设置为65536即可 整数,默认为65536
setConnectTimeoutSec 网络连接超时时间 整数,单位秒,默认为10
setSendTimeoutSec 日志发送超时时间 整数,单位秒,15
setDestroyFlusherWaitSec flusher线程销毁最大等待时间 整数,单位秒,1
setDestroySenderWaitSec sender线程池销毁最大等待时间 整数,单位秒,1
setCompressType 数据上传时的压缩类型,默认为LZ4压缩 整数,0 不压缩,1 LZ4压缩,默认为1
setNtpTimeOffset 设备时间与标准时间之差,值为标准时间-设备时间,一般此种情况用户客户端设备时间不同步的场景 整数,单位秒,默认为0
setMaxLogDelayTime 日志时间与本机时间之差,超过该大小后会根据 setDropDelayLog 选项进行处理。 整数,单位秒,默认为7243600,即7天
setDropDelayLog 对于超过 setMaxLogDelayTime 日志的处理策略 整数,0 不丢弃,把日志时间修改为当前时间; 1 丢弃,默认为 0 (不丢弃)
setDropUnauthorizedLog 是否丢弃鉴权失败的日志 整数,0 不丢弃,1丢弃,默认为 0
setCallbackFromSenderThread 是否从 sender 线程回调 callback 布尔值,true,从 sender 线程回调;false,从主线程回调。默认为 true

设置回调函数,创建client

// 回调函数不填,默认无回调
LogProducerClient client = new LogProducerClient(config, new LogProducerCallback() {
    @Override
    public void onCall(int resultCode, String reqId, String errorMessage, int logBytes, int compressedBytes) {
        // 回调
        // resultCode       返回结果代码
        // reqId            请求id
        // errorMessage     错误信息,没有为null
        // logBytes         日志大小
        // compressedBytes  压缩后日志大小
        android.util.Log.d("LogProducerCallback",String.format("%s %s %s %s %s",
                                LogProducerResult.fromInt(resultCode), reqId, errorMessage, logBytes, compressedBytes));
    }
});

写数据

Log log = new Log();
log.putContent("k1", "v1");
log.putContent("k2", "v2");
// addLog第二个参数flush,是否立即发送,1代表立即发送,不设置时默认为0
LogProducerResult res = client.addLog(log, 0);
MIT License Copyright (c) 2016 Alibaba Cloud Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

Aliyun Log Producer for Android。 展开 收起
Java
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/juranyougegaoshou/aliyun-log-android-sdk.git
git@gitee.com:juranyougegaoshou/aliyun-log-android-sdk.git
juranyougegaoshou
aliyun-log-android-sdk
aliyun-log-android-sdk
master

搜索帮助