微信Mars——xlog使用全解析
很多人問我微信的Mars到底有什麼用,今天就告訴你其中一個最簡單的!
如約而至,微信在12月19日開源了底層的通訊庫——Mars,其中有一個部分,是一個高效能的日誌模組——xlog。
xlog的詳細介紹,大家可以參考微信技術公眾號的這篇文章——微信終端跨平臺元件 mars 系列(一) - 高效能日誌模組xlog。
本篇文章將帶領大家將xlog模組抽取出來,作為一個單獨的模組來使用。
編譯so庫
首先,我們clone下Mars的原始碼,然後進入其中的libraries目錄,直接執行下面的Python指令碼:
python build_android.py複製程式碼
注意,這裡需要配置好本地的NDK編譯環境,這裡不贅述
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。
編譯好之後,就會生成下面的檔案:
我們需要的就是裡面的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());複製程式碼
使用
使用xlog下的Log類就可以打Log了,跟使用Android原生的Log方式基本一樣:
import com.tencent.mars.xlog.Log;
Log.d("xys", "xysxysxys");複製程式碼
停止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。
優勢在哪
很多人可能會說,這玩意兒跟原生Log系統,還有log4j這類的日誌系統,強大在哪呢?實際上,xlog的優勢主要有以下幾點:
效率、效率、效率:這是最重要的,通過C層去寫日誌
低記憶體、低CPU:效能優勢大,不佔記憶體CPU
功能豐富:與原生Log使用幾乎一致,但增加了寫入檔案功能,同時自帶加密