2022騰訊Mars Xlog日志系統(tǒng)集成指南-iOS篇

前言

Mars 是微信官方的跨平臺跨業(yè)務(wù)的終端基礎(chǔ)組件衙耕,基于C++語言開發(fā)巩梢,可支持Android涯曲、iOS芽卿、Mac寺枉、Windows 平臺抑淫。

包含四大模塊

  • comm:可以獨立使用的公共庫,包括 socket姥闪、線程始苇、消息隊列、協(xié)程等筐喳;
  • xlog:高可靠性高性能的運行期日志組件催式;
  • SDT: 網(wǎng)絡(luò)診斷組件函喉;
  • STN: 信令分發(fā)網(wǎng)絡(luò)模塊,也是 Mars 最主要的部分蓄氧。

本篇主要介紹iOS下集成mars 的 xlog日志系統(tǒng)指南函似。

iOS接入項目全過程

一、Clone mars 項目

這里用的ssh方式克制喉童, 如果沒有配置github ssh,可以選擇https的撇寞,這里不多贅述。

git clone git@github.com:Tencent/mars.git

二堂氯、 編譯Mars

由于 Mars 是采用C++編寫蔑担,我們需要編譯Mars才可以導入到iOS項目中。這里我分步講解咽白。

  • 檢查是否安裝cmake

如果沒有則需要安裝


which cmake
/usr/local/bin/cmake

安裝cmake 采用brew 安裝,如果沒有安裝brew 請自行百度安裝啤握。


brew install cmake

  • 編譯mars

mars項目有許多py腳本一鍵編譯,這里采用ios的腳本

// 進去項目的 mars 文件夾中
cd ./mars/mars

python build_ios.py

//然后選擇 2 Clean && build xlog (由于只集成xlog 我們選2即可) 等待編譯

當看到如下文案既是編譯成功

==================Output========================
cmake_build/iOS/Darwin.out/mars.framework

三晶框、 導入framework到項目中

將/mars/mars/cmake_build/iOS/Darwin.out/mars.framework 拖入到iOS項目中

[圖片上傳失敗...(image-969f3e-1658282875387)]

導入如下系統(tǒng)Frameworks

[圖片上傳失敗...(image-de8429-1658282875387)]

  • 將AppDelegate.m 改為 AppDelegate.mm 兼容c++

[圖片上傳失敗...(image-e7982f-1658282875387)]

四排抬、編寫Helper方法,可以參考Mars iOS Demo

[圖片上傳失敗...(image-44eab0-1658282875387)]

JRXlogManager 為基于Mars中 ios demo Helper類編寫的單例子


@interface JRXlogManager : NSObject

+ (instancetype)shared;

- (void)initXlog:(const char *)prefixName pathName:(NSString *)pathName;

/** 關(guān)閉Xlog */
- (void)closeXlog;

- (void)log:(XLoggerType)level tag:(const char *)tag content:(NSString *)content;

- (void)infoLogWithTag:(const char *)tag Content:(NSString *)content;

- (void)debugLogWithTag:(const char *)tag Content:(NSString *)content;

- (void)errorLogWithTag:(const char *)tag Content:(NSString *)content;

- (void)warningLogWithTag:(const char *)tag Content:(NSString *)content;

@end

  • 初始化Xlog

這里我選擇在app didfinish中初始化授段, 實際應(yīng)該在登錄中切換蹲蒲,demo項目就隨意一點了。


[[JRXlogManager shared] closeXlog];
    [[JRXlogManager shared] initXlog:[@"test_xlog_userId" UTF8String] pathName:XlogDirName];
    
    [[JRXlogManager shared] infoLogWithTag:JRDebugMessage Content:@"App init()"];

  • 核心方法

其中pub_key 對應(yīng) 一個private_key 到時解碼xlog文件的時候 要替換腳本里面的一個private_key 侵贵, mars 也提供了 gen_key.py 腳本 生成 RSA Key届搁。在 /mars/mars/log/crypt 目錄中


- (void)initXlog:(const char *)prefixName pathName:(NSString *)pathName {
    NSString* logPath = getXlogPath(pathName);
    
    // set do not backup for logpath
    const char* attrName = "com.apple.MobileBackup";
    u_int8_t attrValue = 1;
    setxattr([logPath UTF8String], attrName, &attrValue, sizeof(attrValue), 0, 0);
    
    // init xlog
#if DEBUG
    xlogger_SetLevel(kLevelDebug);
    mars::xlog::appender_set_console_log(true);
#else
    xlogger_SetLevel(kLevelInfo);
    appender_set_console_log(false);
#endif
    mars::xlog::XLogConfig config;
    config.mode_ = mars::xlog::kAppenderAsync;
    config.logdir_ = [logPath UTF8String];
    config.nameprefix_ = prefixName;
    config.compress_mode_ = mars::xlog::kZlib;
    config.compress_level_ = 0;
    config.cachedir_ = "";
    config.cache_days_ = 0;
    //    config.pub_key_ = "";
        config.pub_key_ = "572d1e2710ae5fbca54c76a382fdd44050b3a675cb2bf39feebe85ef63d947aff0fa4943f1112e8b6af34bebebbaefa1a0aae055d9259b89a1858f7cc9af9df1";
    
//    PRIV_KEY = "145aa7717bf9745b91e9569b80bbf1eedaa6cc6cd0e26317d810e35710f44cf8"
//    PUB_KEY = "572d1e2710ae5fbca54c76a382fdd44050b3a675cb2bf39feebe85ef63d947aff0fa4943f1112e8b6af34bebebbaefa1a0aae055d9259b89a1858f7cc9af9df1"
    appender_open(config);
}

五、上傳日志

xlog日志已經(jīng)存到到你設(shè)置的沙盒路徑窍育,正常來說你要拿這個沙盒路徑上傳到自己服務(wù)器卡睦,你可以選擇定時上傳 也可以選擇強拉用戶數(shù)據(jù)(依賴socket 推送到客戶端)。 當然開發(fā)模式情況下 我們可以選擇自己上傳漱抓,使用蘋果自帶的UIActivityViewController 就可以很輕松的使用Air Drop發(fā)到自己mac 或者 復(fù)制到微信表锻。具體代碼可以看我下面的demo地址源碼

[圖片上傳失敗...(image-b8921d-1658282875387)]

六、解析日志

方法一

mars 目錄/mars/mars/log/crypt 下 提供了三個腳本乞娄,我們?nèi)ソ馕鰔log日志浩嫌。但是如果你直接使用應(yīng)該會報錯,它有很多模塊依賴补胚,需要你一一用pip去安裝码耐。

分別是

  • decode_mars_crypt_log_file.py

此為加密的解析方式溶其,需要替換里面的private_key 參數(shù)

  • decode_mars_nocrypt_log_file.py

此為不加密的解析骚腥,如果你ios項目中的pub_key 為空傳,也就是不加密束铭,就用這個py腳本解析廓块。

  • gen_key.py

生成一對新的RSA 可以

方法二

使用我用Flutter Desktop開發(fā)的 XlogDecoder解析桌面工具。目前只支持Mac契沫, 稍后會支持window带猴。 無需任何py環(huán)境,直接把xlog日志,或文件夾拖到窗口即可懈万。 會自動給你解析出相應(yīng)日志拴清。支持加密與不加密,加密的話需要你手動輸入private_key

[圖片上傳失敗...(image-394be2-1658282875387)]

七会通、附件地址

末尾

后續(xù)我編寫的xlog docoder GUI 也會編寫相應(yīng)文章口予,詳細說明原理 歡迎git hub star 以及 掘金點贊。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涕侈,一起剝皮案震驚了整個濱河市沪停,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌裳涛,老刑警劉巖木张,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異端三,居然都是意外死亡窟哺,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門技肩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人浮声,你說我怎么就攤上這事虚婿。” “怎么了泳挥?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵然痊,是天一觀的道長。 經(jīng)常有香客問我屉符,道長剧浸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任矗钟,我火速辦了婚禮唆香,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吨艇。我一直安慰自己躬它,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布东涡。 她就那樣靜靜地躺著冯吓,像睡著了一般倘待。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上组贺,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天凸舵,我揣著相機與錄音,去河邊找鬼失尖。 笑死啊奄,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的雹仿。 我是一名探鬼主播增热,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胧辽!你這毒婦竟也來了峻仇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤邑商,失蹤者是張志新(化名)和其女友劉穎摄咆,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體人断,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡吭从,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了恶迈。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涩金。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖暇仲,靈堂內(nèi)的尸體忽然破棺而出步做,到底是詐尸還是另有隱情,我是刑警寧澤奈附,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布全度,位于F島的核電站,受9級特大地震影響斥滤,放射性物質(zhì)發(fā)生泄漏将鸵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一佑颇、第九天 我趴在偏房一處隱蔽的房頂上張望顶掉。 院中可真熱鬧,春花似錦挑胸、人聲如沸一喘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凸克。三九已至议蟆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間萎战,已是汗流浹背咐容。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蚂维,地道東北人戳粒。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像虫啥,于是被迫代替她去往敵國和親蔚约。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容