不少人問我微信的Mars到底有什麼用,今天就告訴你其中一個最簡單的!javascript
如約而至,微信在12月19日開源了底層的通訊庫——Mars,其中有一個部分,是一個高性能的日誌模塊——xlog。java
xlog的詳細介紹,你們能夠參考微信技術公衆號的這篇文章——微信終端跨平臺組件 mars 系列(一) - 高性能日誌模塊xlog。python
本篇文章將帶領你們將xlog模塊抽取出來,做爲一個單獨的模塊來使用。android
首先,咱們clone下Mars的源碼,而後進入其中的libraries目錄,直接執行下面的Python腳本:git
python build_android.py複製代碼
注意,這裏須要配置好本地的NDK編譯環境,這裏不贅述github
Enter menu:
1. build mars static libs.
2. build mars shared libs.
3. build xlog static libs.
4. build xlog shared libs.
5. exit.複製代碼
咱們須要編譯兩個庫:3和4。
編譯好以後,就會生成下面的文件:shell
咱們須要的就是裏面的Java文件和so庫,將mars_android_sdk/src目錄下的Java文件以及 libs/複製到你的項目中:緩存
如圖所示,工程的配置就完成了。微信
xlog能夠加密每一行輸出的文件並寫入文件,因此須要下面的權限:app
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>複製代碼
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());複製代碼
使用xlog下的Log類就能夠打Log了,跟使用Android原生的Log方式基本同樣:
import com.tencent.mars.xlog.Log;
Log.d("xys", "xysxysxys");複製代碼
在Application或者Activity的銷燬方法中,進行xlog的關閉操做,從而生成日誌文件:
Log.appenderClose();複製代碼
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。
不少人可能會說,這玩意兒跟原生Log系統,還有log4j這類的日誌系統,強大在哪呢?實際上,xlog的優點主要有如下幾點:
效率、效率、效率:這是最重要的,經過C層去寫日誌
低內存、低CPU:性能優點大,不佔內存CPU
功能豐富:與原生Log使用幾乎一致,但增長了寫入文件功能,同時自帶加密