aliyun / aliyun-log-android-sdk

MIT License
180 stars 40 forks source link

阿里云log sdk crash ,报错指向的是libssl.so文件 #61

Closed haibuzou closed 3 years ago

haibuzou commented 3 years ago

报错的堆栈

00 pc 00018698 /system/lib/libssl.so (SSL_do_handshake+3) [armeabi-v7a]

01 pc 0000af3b /system/lib/libjavacrypto.so [armeabi-v7a]

02 pc 0049a4a7 /data/dalvik-cache/arm/system@framework@boot.oat (oatexec+4826279) [armeabi]

java: com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:324) com.android.okhttp.internal.http.SocketConnector.connectTls(SocketConnector.java:103) com.android.okhttp.Connection.connect(Connection.java:143) com.android.okhttp.Connection.connectAndSetOwner(Connection.java:185) com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128) com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:342) com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:331) com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:249) com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:437) com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114) com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:245) com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218) com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:25) com.aliyun.sls.android.producer.LogProducerHttpTool.android_http_post(LogProducerHttpTool.java:10)

chaolee50 commented 3 years ago

你好,怎么配置的呢,有几个client呢

chaolee50 commented 3 years ago

机器是什么型号,什么版本的呢

haibuzou commented 3 years ago

sdk版本是'com.aliyun.openservices:aliyun-log-android-sdk:2.5.7',

每次执行上传log任务就会新建一次LogProducerClient。

出错的机器是

图片

我的配置: // 设置主题 config.setTopic(firstLog.getTopic()); // 每个缓存的日志包的大小上限,取值为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(1);
                // 持久化的文件名,需要保证文件所在的文件夹已创建。配置多个客户端时,不应设置相同文件
                config.setPersistentFilePath(ConfigConstant.getContext().getFilesDir() + "/"+firstLog.getFileName()+".dat");
                // 是否每次AddLog强制刷新,高可靠性场景建议打开
                config.setPersistentForceFlush(1);
                // 持久化文件滚动个数,建议设置成10。
                config.setPersistentMaxFileCount(10);
                // 每个持久化文件的大小,建议设置成1-10M
                config.setPersistentMaxFileSize(1024 * 1024);
                // 本地最多缓存的日志数,不建议超过1M,通常设置为65536即可
                config.setPersistentMaxLogCount(65536);

                //网络连接超时时间,整数,单位秒,默认为10
                config.setConnectTimeoutSec(10);
                //日志发送超时时间,整数,单位秒,默认为15
                config.setSendTimeoutSec(15);
                //flusher线程销毁最大等待时间,整数,单位秒,默认为1
                config.setDestroyFlusherWaitSec(2);
                //sender线程池销毁最大等待时间,整数,单位秒,默认为1
                config.setDestroySenderWaitSec(2);
                //数据上传时的压缩类型,默认为LZ4压缩,0 不压缩,1 LZ4压缩,默认为1
                config.setCompressType(1);
                //设备时间与标准时间之差,值为标准时间-设备时间,一般此种情况用户客户端设备时间不同步的场景
                //整数,单位秒,默认为0;比如当前设备时间为1607064208, 标准时间为1607064308,则值设置为 1607064308 - 1607064208 = 10
                config.setNtpTimeOffset(3);
                //日志时间与本机时间之差,超过该大小后会根据 `drop_delay_log` 选项进行处理。
                //一般此种情况只会在设置persistent的情况下出现,即设备下线后,超过几天/数月启动,发送退出前未发出的日志
                //整数,单位秒,默认为7*24*3600,即7天
                config.setMaxLogDelayTime(30 * 24 * 3600);
                //对于超过 `max_log_delay_time` 日志的处理策略
                //0 不丢弃,把日志时间修改为当前时间; 1 丢弃,默认为 1 (丢弃)
                config.setDropDelayLog(1);
                //是否丢弃鉴权失败的日志,0 不丢弃,1丢弃
                //默认为 0,即不丢弃
                config.setDropUnauthorizedLog(0);
haibuzou commented 3 years ago

LogClient最好app周期内创建一次,然后复用