微信Mars——xlog使用全解析
微信Mars——xlog使用全解析
如約而至,微信在12月19日開源了底層的通信庫——Mars,其中有一個部分,是一個高性能的日志模塊——xlog。
xlog的詳細介紹,大家可以參考微信技術公眾號的這篇文章——微信終端跨平臺組件 mars 系列(一) - 高性能日志模塊xlog。
本篇文章將帶領大家將xlog模塊抽取出來,作為一個單獨的模塊來使用。
編譯so庫
首先,我們clone下Mars的源碼,然后進入其中的libraries目錄,直接執行下面的Python腳本:
python build_android.py
注意,這里需要配置好本地的NDK編譯環境,這里不贅述
Enter menu:
- build mars static libs.
- build mars shared libs.
- build xlog static libs.
- build xlog shared libs.
- exit.</code></pre>
我們需要編譯兩個庫:3和4。
編譯好之后,就會生成下面的文件:

我們需要的就是里面的Java文件和so庫,將mars_android_sdk/src目錄下的Java文件以及 libs/復制到你的項目中:

如圖所示,工程的配置就完成了。
使用
權限
xlog可以加密每一行輸出的文件并寫入文件,所以需要下面的權限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
加載so
xlog需要使用到我們前面編譯出的兩個so庫:
System.loadLibrary("stlport_shared");
System.loadLibrary("marsxlog");
初始化
在代碼中對xlog進行初始化:
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());</code></pre>
使用
使用xlog下的Log類就可以打Log了,跟使用Android原生的Log方式基本一樣:
import com.tencent.mars.xlog.Log;
Log.d("xys", "xysxysxys");</code></pre>
停止Log記錄
在Application或者Activity的銷毀方法中,進行xlog的關閉操作,從而生成日志文件:
Log.appenderClose();
解析Log
Log生成完畢后,會在指定的路徑下生成相應的日志文件:
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是緩存文件,不用關心,我們需要的是.xlog文件,我們把這個文件pull出來,使用Mars提供的Python腳本進行解密。
找到Mars源碼log/crypt/decode_mars_log_file.py下的這個文件,執行:
? mars_xlog_sdk python decode_mars_log_file.py ~/Downloads/log/MarsSample_20161230.xlog
即可生成對應的log文件,用Sublime即可打開:

相關內容
大部分的內容實際上都在Mars源碼的wiki中,但是內容比較散,所以我這里做了一個比較通用的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
優勢在哪
很多人可能會說,這玩意兒跟原生Log系統,還有log4j這類的日志系統,強大在哪呢?實際上,xlog的優勢主要有以下幾點:
-
效率、效率、效率:這是最重要的,通過C層去寫日志
-
低內存、低CPU:性能優勢大,不占內存CPU
-
功能豐富:與原生Log使用幾乎一致,但增加了寫入文件功能,同時自帶加密
來自:http://blog.csdn.net/eclipsexys/article/details/53965065