Android 微信高性能日誌存儲庫Xlog的使用

XLog是什麼

騰訊開源的Mars項目中有個XLOG日誌庫。

XLog是一個高性能文本存儲方案,在真實環境中經受了微信數億級別的考驗,具有很好的穩定性。
由於其是使用C語言來實現的,故有佔用性能、內存小,存儲速度快等優點,
支持多線程,甚至多進程的使用,支持定期刪除日誌,
同時,擁有特定算法,進行了文件的壓縮,甚至可以配置文件加密。

如何使用

1.依賴XLOG

implementation "com.tencent.mars:mars-xlog:1.2.3"

2.依賴so庫

新建jniLibs文件夾,將demo項目中的so複製到該文件夾

在這裏插入圖片描述
然後,在gradle中配置abiFilters
在這裏插入圖片描述

3.添加權限

在Manifest中添加存儲權限

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

然後,在MainActivity中申請權限

ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},123);

初始化XLog

String logPath = Environment.getExternalStorageDirectory().getPath() + "/123logsample/xlog";
String cachePath = Environment.getExternalStorageDirectory().getPath() + "/123logsample/xlog/cache";
Log.d("XLOG", logPath);
Xlog.setConsoleLogOpen(true); //是否把日誌打印到控制檯
Xlog.appenderOpen(Xlog.LEVEL_DEBUG, Xlog.AppednerModeAsync, cachePath, logPath, "LOGSAMPLE", 10, "");
com.tencent.mars.xlog.Log.setLogImp(new Xlog());

其中 需要注意

  • 如果你的程序使用了多進程,不要把多個進程的日誌輸出到同一個文件中,保證每個進程獨享一個日誌文件。
  • 保存 log的目錄請使用單獨的目錄,不要存放任何其他文件防止被 xlog 自動清理功能誤刪。
  • debug 版本下建議把控制檯日誌打開,日誌級別設爲Verbose 或者 Debug, release 版本建議把控制檯日誌關閉,日誌級別使用 Info.
  • cachePath這個參數必傳,mmap文件會放在這個目錄,如果傳空串,可能會發生 SIGBUS 的crash。

打印日誌

TextView tv = (TextView) findViewById(R.id.sample_text);
tv.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(MainActivity.this, "Hello", Toast.LENGTH_SHORT).show();
        com.tencent.mars.xlog.Log.i("z-test","hello world!");
    }
});

然後,可以在合適的時機,進行日誌的Flush

com.tencent.mars.xlog.Log.appenderFlush(true);

反初始化

在 程序退出時反初始化,比如可以放在MainActivity的onDestory方法內

com.tencent.mars.xlog.Log.appenderClose();

運行程序

然後,我們就可以運行程序,打印日誌了。
可以看到,在指定的日誌目錄,有一個.xlog文件

解碼xlog文件

首先,我們要在電腦上安裝Python,當前版本需要2.7.12。

然後,我們在源碼中的 decode_mars_nocrypt_log_file.py 複製到xlog同一個文件夾下。

運行CMD,進入改文件夾下,執行Python decode_mars_nocrypt_log_file.py 文件名.xlog進行解碼,

可以看到,該文件夾下,生成了.xlog.log文件,用記事本即可打開查看日誌了。

進階

這些是XLog基礎的時候,如果想要自定義日誌格式,想要對源碼做一些修改,那麼需要修改後,進行編譯,使用生成的so依賴到項目中,具體詳見
Android Mars XLog的編譯
Android Mars XLog 自定義存儲格式

其他

官方文檔
GitHub
Mars Android 接入指南

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章