1. 程式人生 > >美團開源日誌框架Logan初探

美團開源日誌框架Logan初探

最近群裡的美團童靴發了個連結,說自家的日誌框架Logan開源了,地址為Logan,中文介紹地址為Logan。閒的無聊就體驗了一把,如果你想了解一下,不妨花點時間閱讀一下本文。

首先非常感謝美團童靴大公無私的精神,將自己的心血開源。自己也學習了一波,這個框架使用起來非常簡單,方法非常少,大致的使用步驟分為以下幾步:

  1. 初始化LoganConfig 你可以在application中初始化,也可以在Activity中初始化,只要你用之前初始化就可以了,config使用了builder模式,非常容易理解:

gradle.build:

implementation 'com.dianping.android.sdk:logan:1.0.0'

初始化配置:

LoganConfig config = new LoganConfig.Builder().
                setCachePath(getFilesDir().getAbsolutePath())
                .setPath(getExternalFilesDir(null).getAbsolutePath() + File.separator + "logan_v1")
                .setEncryptKey16("0123456789012345".getBytes())    //加密模式
                .setEncryptIV16("0123456789012345".getBytes())      //加密模式
                .build();
Logan.init(config);

因為美團非常注重隱私模式,所有會存在16位ase加密Key16位aes加密IV,這裡不做重點,只需要記得加密的key就行。

  1. 新增日誌
 //設定debug模式
 Logan.setDebug(true);
 //開始寫日誌
 Logan.w("this is the log ",1);
//立即寫入日誌
 Logan.f();
  1. 日誌上傳&日誌解密
    剛開始接觸這個日誌框架時,感覺比較懵逼,沒有提供本地檢視的機制,只能上傳並解密之後才能檢視。
    上傳時需要繼承com.dianping.logan.SendLogRunnable.SendLogRunnable

    並實現sendLog
    方法,方法中的引數是需要上傳的檔案,當然你上傳到哪裡去是你的事,不過檔案上傳之後,並不能直接使用,還需要專門的解密工具,美團也提供了node.js伺服器,傳入檔案,得到解密之後的檔案,才可以去分析相關的日誌邏輯。為此,美團專門寫了如何解析解密後的日誌檔案,為此就不多了。自己可以看一下。

  2. 檢視自己的日誌檔案
    我的介面如下:

    程式碼也是相當的簡單:

public void inputLog1(View view) {
        Logan.w("log one",1);
        Logan.w("log one",1);
        Logan.w("log one",1);
        Logan.w("log one",1);
    }

    public void inputLog3(View view) {
        Logan.w("log two", 2);
        Logan.w("log two", 2);
        Logan.w("log two", 2);
        Logan.w("log two", 2);
        Logan.w("log two", 2);
    }
    
    public void inputLog2(View view) {
        Logan.w("log three",3);
        Logan.w("log three",3);
        Logan.w("log three",3);
        Logan.w("log three",3);
        Logan.w("log three",3);
    }

一頓亂點之後,上傳至自己的伺服器,然後解密之後,得到的類似如下的資料:
在這裡插入圖片描述
本著簡介的態度,Logan框架將每一條日誌只用了5個欄位記錄,分別是:

欄位 含義 舉例
c log-content 日誌的內容 long one
f flag-key 日誌的標記 1
l local-time 日誌的當地時間 1539611498547
n threadname_key 寫當前日誌的執行緒名 main/thread-24
i threadid_key 寫當前日誌的執行緒id 1
m ismain_key 是否在主執行緒中執行 true/false

這些定義都可以在construct_data.c原始碼中找到定義,一條簡單清晰的日誌就可以展示在你的面前了。

說了這麼多,那麼就說說自己的看法吧。

既然Logan號稱承受過千億量級的考驗,那麼就一定有它的長處,但是現在[18年10月17號]處於開源的1.0.0版本,有很多功能需要完善,日誌獲取也不是很完美,日誌的模式也比較單一,但是我們有理由相信經過大家的努力,Logan會越發優秀。

當然Logan真正距離線上環境還需要一段時間,畢竟後臺還沒有開源,那就讓我們敬請期待吧。