Android 微信高性能日志存储库Xlog的使用 您所在的位置:网站首页 微信日志文件怎么查看 Android 微信高性能日志存储库Xlog的使用

Android 微信高性能日志存储库Xlog的使用

2024-03-12 19:19| 来源: 网络整理| 查看: 265

XLog是什么

腾讯开源的Mars项目中有个XLOG日志库。

XLog是一个高性能文本存储方案,在真实环境中经受了微信数亿级别的考验,具有很好的稳定性。 由于其是使用C语言来实现的,故有占用性能、内存小,存储速度快等优点, 支持多线程,甚至多进程的使用,支持定期删除日志, 同时,拥有特定算法,进行了文件的压缩,甚至可以配置文件加密。

如何使用 1.依赖XLOG implementation "com.tencent.mars:mars-xlog:1.2.3" 2.依赖so库

新建jniLibs文件夹,将demo项目中的so复制到该文件夹

在这里插入图片描述 然后,在gradle中配置abiFilters 在这里插入图片描述

3.添加权限

在Manifest中添加存储权限

然后,在MainActivity中申请权限

ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},123); 初始化XLog System.loadLibrary("c++_shared") System.loadLibrary("marsxlog") val logDir = getExternalFilesDir("xlog") val cacheLogDir = File(logDir, "cache") Xlog.setConsoleLogOpen(true); //是否把日志打印到控制台 Xlog.appenderOpen( Xlog.LEVEL_ALL, Xlog.AppednerModeAsync, cacheLogDir?.path, logDir?.path, "XLOG", 10, "" ) com.tencent.mars.xlog.Log.setLogImp(Xlog())

其中 需要注意

如果你的程序使用了多进程,不要把多个进程的日志输出到同一个文件中,保证每个进程独享一个日志文件。保存 log的目录请使用单独的目录,不要存放任何其他文件防止被 xlog 自动清理功能误删。debug 版本下建议把控制台日志打开,日志级别设为Verbose 或者 Debug, release 版本建议把控制台日志关闭,日志级别使用 Info.cachePath这个参数必传,mmap文件会放在这个目录,如果传空串,可能会发生 SIGBUS 的crash。 打印日志 TextView tv = (TextView) findViewById(R.id.sample_text); tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "Hello", Toast.LENGTH_SHORT).show(); com.tencent.mars.xlog.Log.i("z-test","hello world!"); } });

然后,可以在合适的时机,进行日志的Flush

com.tencent.mars.xlog.Log.appenderFlush(true); 反初始化

在 程序退出时反初始化,比如可以放在MainActivity的onDestory方法内

com.tencent.mars.xlog.Log.appenderClose(); 运行程序

然后,我们就可以运行程序,打印日志了。 可以看到,在指定的日志目录,有一个.xlog文件

解码xlog文件

首先,我们要在电脑上安装Python,当前版本需要2.7.12。

然后,我们在源码中的 decode_mars_nocrypt_log_file.py 复制到xlog同一个文件夹下。

运行CMD,进入改文件夹下,执行Python decode_mars_nocrypt_log_file.py 文件名.xlog进行解码,

可以看到,该文件夹下,生成了.xlog.log文件,用记事本即可打开查看日志了。

遇到的问题 No module named zstandard

执行命令的时候,报No module named zstandard错误

Traceback (most recent call last): File "decode_mars_nocrypt_log_file.py", line 10, in import zstandard as zstd ImportError: No module named zstandard

这个错误在Github上找到了解决方案 https://github.com/Tencent/mars/issues/903

具体操作就是在Pip官网上下载pip,解压后使用CMD执行如下命令

pip install pip==20.3.4

这里pip版本用的20.3.4,对应于python2.7.18.

然后再执行pip install zstandard,可以看到安装成功

在这里插入图片描述 然后就可以正常执行Python decode_mars_nocrypt_log_file.py 文件名.xlog进行解码了

No module named pyelliptic

如果是使用 Python decode_mars_crypt_log_file.py 文件名.xlog进行解码的话,可以能报No module named pyelliptic的错误,同样,我们需要使用pip来安装pyelliptic

需要注意的是,需要安装1.5.10版本的pyplliptic,不能安装最新版本的,否则会报下面这个错误

Traceback (most recent call last): File "decode_mars_crypt_log_file.py", line 9, in import pyelliptic File "C:\Developer\Python2.7.18\lib\site-packages\pyelliptic\__init__.py", line 43, in from .openssl import OpenSSL File "C:\Developer\Python2.7.18\lib\site-packages\pyelliptic\openssl.py", line 309, in raise Exception("Couldn't load OpenSSL lib ...") Exception: Couldn't load OpenSSL lib ...

执行如下代码进行安装 (github需要能够正常访问)

pip install https://github.com/mfranciszkiewicz/pyelliptic/archive/1.5.10.tar.gz#egg=pyelliptic

在这里插入图片描述 安装成功后,再执行Python decode_mars_crypt_log_file.py 文件名.xlog就能正常解码了 在这里插入图片描述

进阶

这些是XLog基础的时候,如果想要自定义日志格式,想要对源码做一些修改,那么需要修改后,进行编译,使用生成的so依赖到项目中,具体详见 Android Mars XLog的编译 Android Mars XLog 自定义存储格式

Android Mars XLog Demo示例代码详见 https://download.csdn.net/download/EthanCo/12168054

其他

官方文档 GitHub Mars Android 接入指南



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有