背景
为啥要搭建日志系统?
1)APP (android & iOS)没有统一的日志上报系统,
很多问题用户端的问题都没法依赖日志来调查。
我们需要什么样的日志系统?
1)高性能,频繁IO不影响APP性能。
2)不丢日志。
3)压缩率高,加密的日志。
4)过期日志自动清理。
5)日志回捞的高可靠。
6)用户主动上报日志。
XLog vs LogAn
mmap | 加密 | 压缩率(官网) | 日志上传 | |
---|---|---|---|---|
XLog | Y | Y | 83.7% | N |
LogAn | Y | Y | 87% | Y |
性能对比:(Honor 9i LLD-AL20 Android 8.0.0)
单条日志长度18,写入10w条。
内存使用(M) | CPU | 耗时(ms) | 增加文件大小 | 压缩率 | |
---|---|---|---|---|---|
XLog | 5M | 13% | 4181 | 870801 | 51.62% |
LogAn | 7M | 17% | 1580 | 228637 | 87.29% |
单条日志长度1177,写入10w条。
内存使用(M) | CPU | 耗时(ms) | 增加文件大小 | 压缩率 | |
---|---|---|---|---|---|
XLog | 10M | 13% | 7840 | 2049293 | 98.25% |
LogAn | 13M | 20% | 2094 | 358676 | 99.69% |
从上面的对比可以发现:
1)LogAn的CPU & 内存使用会稍高些。
2)LogAn耗时明显低于XLog。
3)LogAn增加的文件大小也比XLog小。
4)LogAn压缩率明显高于XLog。
LogAn 日志协议:

日志解密
XLog:
python decode_mars_nocrypt_log_file.py xxx.log
回捞方案

1)触发日志上传有四个入口,Push /Config/教师端-触发/设置页面主动上报
2)App 内部维护一个boolean shouldUploadLog 来决定是否上传日志。
3)需要上传日志则触发UpLoadLogIntentService 来压缩日志文件到zip包中,然后upload。
Push - 消息透传 & 通知栏推送
Config - userId
教师端-触发SIO
CommonParam
字段 | 描述 |
---|---|
source | 来源(android/iOS/web) |
deviceId | 设备号id |
userId | 用户id |
roomId | 房间id |
systemVersion | 系统版本 |
deviceType | 设备型号 |
agoraVersion | 声网版本 |
appVersion | App版本 |