什么是xLog
2017年12月份,微信官方开源了底层通信库mars。其中xLog是该库中的高性能日志模块,具有如下特性:
- 高性能高压缩率
- 不丢失任何一行日志
- 避免系统卡顿
- 避免CPU波峰
- 支持数据加密
本人基于官方demo做了接口抽象,简化了调用。demo及依赖库在: https://github.com/cxyzy1/mars_xlog_demo.git
- 初始化
FileLog.init(context, "")
- 写日志
FileLog.d("tag", "write log.")
写日志可用函数列表:
- v:verbose级别(默认此级别不打印,如果需要打印,则需要调用setLevel,设置level为0)
- d:debug级别
- i:info级别
- w:warning级别
- e:error级别
- f:fatal级别
- 获取日志文件: 获取日志文件列表:
FileLog.retrieveLogFiles()
获取打包到一个zip文件的日志:FileLog.retrieveLogFilesAsZip()
- 为保证缓存内容再应用退出时写入了日志文件,建议退出前调用:
FileLog.appenderClose()
- 日志打印是可以分级的,调用setLevel即可设置,可用level值如下:
- 0:输出所有日志
- 1:输出debug日志及以上
- 2:输出info日志及以上
- 3:输出warning日志及以上
- 4:输出error日志及以上
- 5:输出fatal日志及以上
- 6:不输出任何日志
- 混淆设置 proguard文件中添加
-keep class com.tencent.mars.xlog.** { *; }
- 先下载python 2.7(本文档写作使用的2.7.15 x86版本,非x86_64版本) 2.7.15 x86版本下载地址:https://www.python.org/ftp/python/2.7.15/python-2.7.15.msi
- 把log文件从手机里导出至Mars源码log/crypt/文件夹下,在命令行切换到该目录下。 导出文件命令样例:
adb pull /sdcard/mars/log_copy/FileLog_20181109.xlog "E:\mars\log\crypt"
- 文件未做加密 执行:
python decode_mars_nocrypt_log_file.py
- 文件做了加密(初始化时pubKey传入了值,值需要和decode_mars_crypt_log_file.py中PUB_KEY值相同) 执行:
python decode_mars_crypt_log_file.py
注意对于加密场景,执行上面命令前,需要安装pyelliptic,命令为:pip install pyelliptic==1.5.7
。pip命令在C:\Python27\Scripts\目录下。 当前目录下就会生成解码后的FileLog_20181109.xlog.log
- 测试设备:华为 P10 Plus
- 测试方法:每次循环十万次写入同样信息到日志文件,对于普通日志的写入方法采用了如下代码(Kotlin):
fun appendContent(filePath: String, content: String) {
val f = File(filePath)
if (!f.exists()) {
f.createNewFile()
}
f.appendText(content, charset)
}
- 测试数据对比
如果要手工自己编译xlog的so库,可以参考:https://blog.csdn.net/yinxing2008/article/details/84132359
安卓开发技术分享: https://blog.csdn.net/yinxing2008/article/details/84555061