日志服务功能主要分为两大模块:logcat日志和埋点日志。
日志类型 |
定义 |
特点 |
作用 |
logcat日志 |
每个app通过Log打印的日志 |
全,但是关键信息不明显 |
用于分析定位现网问题 |
埋点日志 |
格式化的日志 |
格式规整/信息突出/可配合管理平台进行统计 |
1. 供产品运营分析用户数据 2. 定位现网问题 |
一、需求
整体结构
logcat日志 生成及上传场景
时序图
埋点日志
难点:
1. 日志进程管理
在进程中执行的指令: logcat –v time | egrep –i “abcd”
2. 阻塞式读取日志进程中的输出日志
buffRead = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((line = buffRead.readLine()) != null) {}
这里缓存采用StringBuffer,它是线程安全的。
3. 日志输出到文件及加密过程
每读一行日志会拼接到缓存中,当达到一定数量后写入文件。
也可以是时间轮询触发写入文件。(会有多线程问题)
写文件采用: FileOutputStream
压缩及加密: 采用先gZip压缩,然后再进行异或加密,秘钥存储在代码中可能存在一定的风险。
4. logcat文件上传
由於单个文件都是小文件,不需要支持断点续传,所以只是简单的通过一个接口请求将文件put到云端。
5. 埋点日志存储及上传管理
采用单独的埋点sdk进行管理。