XLog日志组件的学习和使用

4,167 阅读3分钟

最近了解到微信的开源框架Mars,感觉挺有意思的于是自己写了个Demo尝试了一下,此贴为记录贴 (传说中的十分钟学会如何使用xLog
本文主要使用Kotlin语言实现,但使用java的朋友应该也不难看懂,总体的使用是差不多的

啥是XLog

首先简简单单介绍一下XLog吧,因为我个人也不是特别了解,所以就简简单单说一下,作为微信开源框架Mars的一部分,XLog可以实现的就是高性能高压缩地去写日志,避免程序在写日志时发生卡顿等影响性能。

配置依赖

添加相应的依赖,这里使用的是1.2.3版本而不是1.2.4,不过总体而言差别并不大,主要就是config的使用不一样而已

implementation 'com.tencent.mars:mars-xlog:1.2.3'

权限

需要写入权限,可在AndroidManifest中添加以下

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

so文件加载

务必在初始化代码中加入以下内容(Kotlin自觉把分号去掉)

System.loadLibrary("stlport_shared");
System.loadLibrary("marsxlog");

这里提示一下,如果遇到couldn't find "libstlport_shared.so"错误,有可能是因为xlog的两个so包是存放在arm64-v8aarmeabi-v7a下,部分模拟机因为x86等的兼容问题,会报错而导致错误,一般在gradle的android下添加以下代码可以解决问题,实在解决不了就用真机调试。

ndk {
abiFilters "armeabi-v7a", "arm64-v8a"
    }

初始化

初始化,其中System.loadLibrary(xxx)是加载两个so文件的必需语句,而传入参数中的LEVEL可以设置成DEBUG或者ALL等属性,分别可以让日志中打印出不同的Log信息 这里需要注意的是cachePath尽量不要为空,因为如果为空的话容易引发SIGBUS信号的错误。

        //1.2.3版本下
        System.loadLibrary("c++_shared")
        System.loadLibrary("marsxlog")

        val SDCARD =
            getExternalFilesDir("XLogF").toString()
        val logPath = SDCARD+"/Xlog"

// this is necessary, or may crash for SIGBUS
        val cachePath = this.getCacheDir().toString() + "/xlog"
        if (BuildConfig.DEBUG) {
            Xlog.appenderOpen(Xlog.LEVEL_DEBUG, Xlog.AppednerModeAsync, cachePath, logPath, "MarsSample", 0, "");
            Xlog.setConsoleLogOpen(true);
        } else {
            Xlog.appenderOpen(Xlog.LEVEL_INFO, Xlog.AppednerModeAsync, cachePath, logPath, "MarsSample", 0, "");
            Xlog.setConsoleLogOpen(false);
        }
        Log.setLogImp(Xlog())

关闭XLog

XLog的使用除了Open外,当然还需要关闭,这两者不能缺少其中任意一部分,当XLog关闭后,才会生成对应的日志文件。于日志写入结束的地方添加以下语句

com.tencent.mars.xlog.Log.appenderClose()

此时我们可以到对应的Path下找到对应的xlog日志文件,但是目前的日志文件仍不可直接打开,我们需要使用对应的程序对其进行解码生成。

日志生成

此时我们将xlog拉到本地,接着我们从Mars源码中log/crypt/下获取decode_mars_nocrypt_log_file.py文件,把xlog与其放置于同一文件夹下,在Python版本为2.7.x的情况下,我们cmd到对应目录,执行以下语句进行日志文件生成

Python decode_mars_nocrypt_log_file.py 文件名.xlog

执行之后会生成一个log文件,我们可以使用记事本或者其他程序打开并查看日志。 这里需要注意一点是,XLog只会记录Mars组件中的Log,而不会记录系统util中的Log,所以如果我们需要在日志中写入Log,要留意使用的Log是哪个库的组件 (至于日志内容我就懒得贴了)

总结

也是花了挺长时间在项目中接入这个组件的,总体而言对组件的接入和操作了解更深了,写个文章记录一下之前踩过的坑吧,也能帮帮大家解决一下问题这样子,菜还是很菜,继续加油!