微信Mars——xlog使用全解析
很多人問(wèn)我微信的Mars到底有什么用斩萌,今天就告訴你其中一個(gè)最簡(jiǎn)單的缝裤!
如約而至,微信在12月19日開(kāi)源了底層的通信庫(kù)——Mars颊郎,其中有一個(gè)部分憋飞,是一個(gè)高性能的日志模塊——xlog。
xlog的詳細(xì)介紹姆吭,大家可以參考微信技術(shù)公眾號(hào)的這篇文章——微信終端跨平臺(tái)組件 mars 系列(一) - 高性能日志模塊xlog榛做。
本篇文章將帶領(lǐng)大家將xlog模塊抽取出來(lái),作為一個(gè)單獨(dú)的模塊來(lái)使用猾编。
編譯so庫(kù)
首先瘤睹,我們clone下Mars的源碼,然后進(jìn)入其中的libraries目錄答倡,直接執(zhí)行下面的Python腳本:
python build_android.py
注意轰传,這里需要配置好本地的NDK編譯環(huán)境,這里不贅述
Enter menu:
1. build mars static libs.
2. build mars shared libs.
3. build xlog static libs.
4. build xlog shared libs.
5. exit.
我們需要編譯兩個(gè)庫(kù):3和4瘪撇。
編譯好之后获茬,就會(huì)生成下面的文件:
![](https://dn-mhke0kuv.qbox.me/91c188010766224f5b2a.png)
我們需要的就是里面的Java文件和so庫(kù)港庄,將mars_android_sdk/src目錄下的Java文件以及 libs/復(fù)制到你的項(xiàng)目中:
![](https://dn-mhke0kuv.qbox.me/9f6d13b0a0d52f0ebc88.png)
如圖所示,工程的配置就完成了恕曲。
使用
權(quán)限
xlog可以加密每一行輸出的文件并寫入文件鹏氧,所以需要下面的權(quán)限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
加載so
xlog需要使用到我們前面編譯出的兩個(gè)so庫(kù):
System.loadLibrary("stlport_shared");
System.loadLibrary("marsxlog");
初始化
在代碼中對(duì)xlog進(jìn)行初始化:
final String SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
final String logPath = SDCARD + "/marssample/log";
//init xlog
if (BuildConfig.DEBUG) {
Xlog.appenderOpen(Xlog.LEVEL_DEBUG, Xlog.AppednerModeAsync, "", logPath, "MarsSample");
Xlog.setConsoleLogOpen(true);
} else {
Xlog.appenderOpen(Xlog.LEVEL_INFO, Xlog.AppednerModeAsync, "", logPath, "MarsSample");
Xlog.setConsoleLogOpen(false);
}
Log.setLogImp(new Xlog());
使用
使用xlog下的Log類就可以打Log了,跟使用Android原生的Log方式基本一樣:
import com.tencent.mars.xlog.Log;
Log.d("xys", "xysxysxys");
停止Log記錄
在Application或者Activity的銷毀方法中佩谣,進(jìn)行xlog的關(guān)閉操作把还,從而生成日志文件:
Log.appenderClose();
解析Log
Log生成完畢后,會(huì)在指定的路徑下生成相應(yīng)的日志文件:
shell@R7:/sdcard/marssample/log $ ll
-rw-rw---- root sdcard_r 153600 2016-12-30 17:06 MarsSample.mmap2
-rw-rw---- root sdcard_r 29633 2016-12-30 17:06 MarsSample_20161230.xlog
其中MarsSample.mmap2是緩存文件茸俭,不用關(guān)心吊履,我們需要的是.xlog文件,我們把這個(gè)文件pull出來(lái)调鬓,使用Mars提供的Python腳本進(jìn)行解密艇炎。
找到Mars源碼log/crypt/decode_mars_log_file.py下的這個(gè)文件,執(zhí)行:
? mars_xlog_sdk python decode_mars_log_file.py ~/Downloads/log/MarsSample_20161230.xlog
即可生成對(duì)應(yīng)的log文件腾窝,用Sublime即可打開(kāi):
![](https://dn-mhke0kuv.qbox.me/d4f1cbb68c54f957559c.png)
相關(guān)內(nèi)容
大部分的內(nèi)容實(shí)際上都在Mars源碼的wiki中缀踪,但是內(nèi)容比較散,所以我這里做了一個(gè)比較通用的Guide虹脯。
https://github.com/Tencent/mars/wiki/Mars-%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
https://github.com/Tencent/mars/wiki/Mars-Android-%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97
優(yōu)勢(shì)在哪
很多人可能會(huì)說(shuō)驴娃,這玩意兒跟原生Log系統(tǒng),還有l(wèi)og4j這類的日志系統(tǒng)循集,強(qiáng)大在哪呢托慨?實(shí)際上,xlog的優(yōu)勢(shì)主要有以下幾點(diǎn):
效率暇榴、效率、效率:這是最重要的蕉世,通過(guò)C層去寫日志
低內(nèi)存蔼紧、低CPU:性能優(yōu)勢(shì)大,不占內(nèi)存CPU
功能豐富:與原生Log使用幾乎一致狠轻,但增加了寫入文件功能奸例,同時(shí)自帶加密