腾讯开源的Mars项目中有个XLOG日志库。
XLog是一个高性能文本存储方案,在真实环境中经受了微信数亿级别的考验,具有很好的稳定性。
由于其是使用C语言来实现的,故有占用性能、内存小,存储速度快等优点,
支持多线程,甚至多进程的使用,支持定期删除日志,
同时,拥有特定算法,进行了文件的压缩,甚至可以配置文件加密。
implementation "com.tencent.mars:mars-xlog:1.2.3"
新建jniLibs
文件夹,将demo项目中的so复制到该文件夹
在Manifest中添加存储权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
然后,在MainActivity中申请权限
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},123);
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())
其中 需要注意
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文件
首先,我们要在电脑上安装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
错误
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
进行解码了
如果是使用 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 接入指南