微信Mars——xlog使用全解析

xuyisheng發表於2016-12-30

微信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。
編譯好之後,就會生成下面的檔案:

微信Mars——xlog使用全解析

我們需要的就是裡面的Java檔案和so庫,將mars_android_sdk/src目錄下的Java檔案以及 libs/複製到你的專案中:

微信Mars——xlog使用全解析

如圖所示,工程的配置就完成了。

使用

許可權

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——xlog使用全解析

相關內容

大部分的內容實際上都在Mars原始碼的wiki中,但是內容比較散,所以我這裡做了一個比較通用的Guide。

github.com/Tencent/mar…

github.com/Tencent/mar…

優勢在哪

很多人可能會說,這玩意兒跟原生Log系統,還有log4j這類的日誌系統,強大在哪呢?實際上,xlog的優勢主要有以下幾點:

  • 效率、效率、效率:這是最重要的,通過C層去寫日誌

  • 低記憶體、低CPU:效能優勢大,不佔記憶體CPU

  • 功能豐富:與原生Log使用幾乎一致,但增加了寫入檔案功能,同時自帶加密

相關文章