本文主要介紹Mars-xlog的使用過程(iOS)绊汹,與react-native相關(guān)部分,則參考了react-native-xlog垦缅,暫不做詳細(xì)介紹
1. 生成mars.framework
首先安裝
cmake
和XCode
以及python2.7
某残,macOS系統(tǒng)默認(rèn)安裝了python译荞,只要確定版本號(hào)在2.7.*即可,cmake可以在網(wǎng)上搜安裝教程忿晕。到Mars下載最新的代碼装诡,master分支。
-
該項(xiàng)目的目錄分支如下圖践盼,你需要cd到mars文件夾下鸦采,即:mars/mars目錄
514A8B6C-AEF8-477A-9DE9-F4F3733D9E6E.png 在mars/mars目錄下面,跑官方提供的腳本咕幻,腳本文件都在這個(gè)目錄下面都有渔伯,使用下面的命令行,會(huì)出現(xiàn)一個(gè)菜單選項(xiàng)谅河,看個(gè)人需要咱旱,我選擇的是
2
,運(yùn)行等待結(jié)束绷耍,會(huì)輸出一個(gè)mars.framework吐限,在命令行結(jié)束時(shí)會(huì)提供該包的輸出路徑cmake_build/iOS/Darwin.out/mars.framework
python build_ios.py
2. 在項(xiàng)目中,添加配置資源
-
將
mars.framework
直接拖拽到你的項(xiàng)目中褂始,因?yàn)槲抑皇褂昧藊log功能诸典,所有些文件是不需要加到項(xiàng)目中的,否則你在運(yùn)行時(shí)會(huì)報(bào)錯(cuò)duplicate **----什么什么的
崎苗,我只添加了LogUI
之類的4個(gè)文件狐粱,還有需要link的一些libraries,請(qǐng)看圖中文字說明胆数。
E90163FC-CE8A-4CED-8A70-1FAD38F2D673.png 保證你的項(xiàng)目build時(shí)能夠success肌蜻,然后開始使用
3.xlog使用(具體的可以去官方文檔查看,這邊就簡單復(fù)制一些主要的代碼)
- 推薦在 main.mm 的 main 函數(shù)里初始化:
NSString* logPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingString:@"/log"];
// 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);
appender_set_console_log(true);
#else
xlogger_SetLevel(kLevelInfo);
appender_set_console_log(false);
#endif
appender_open(kAppednerAsync, [logPath UTF8String], "Test");
- 在 applicationWillTerminate 函數(shù)中反初始化:
appender_close();
- 需要注意:
保存 log 的目錄請(qǐng)使用單獨(dú)的目錄必尼,不要存放任何其他文件防止被 xlog 自動(dòng)清理功能誤刪蒋搜。
請(qǐng)把 log 目錄設(shè)上不備份的標(biāo)識(shí)。
debug 版本下建議把控制臺(tái)日志打開判莉,日志級(jí)別設(shè)為 Debug, release 版本建議把控制臺(tái)日志關(guān)閉豆挽,日志級(jí)別使用 Info.
直接include xlog頭文件的 oc 文件名后綴一定要是 .mm 不要使用 .m
4.我遇到的問題
- 需求,把日志文件上傳到服務(wù)器券盅,在
RN
頁面上帮哈,一直紅屏報(bào)錯(cuò),說沒有權(quán)限操作document文件夾下面的文件锰镀,最后在終端敲了下面一段命令行才好娘侍,log
是我在document文件夾下創(chuàng)建的下級(jí)目錄咖刃,下面的命令行要cd 到document路徑下
sudo chmod -R 777 log/
ls -l log
****未完待續(xù)****
2019-05-13 接上文
1.日志解壓問題
官網(wǎng)明確指出,如果不想使用加密模塊或者環(huán)境配置不成功私蕾,public key 參數(shù)設(shè)置為空字符即可僵缺,解密腳本使用 [decode_mars_nocrypt_log_file.py](https://github.com/Tencent/mars/blob/master/mars/log/crypt/decode_mars_nocrypt_log_file.py), 但這樣日志會(huì)只壓縮不加密。
即調(diào)用 appender_open
方法時(shí)踩叭,最后一個(gè)參數(shù) _pub_key
傳入空字符:
appender_open(mode, [logPath UTF8String], [nameprefix UTF8String], "");
官網(wǎng)文檔中給的 appender_open 方法多了一個(gè)參數(shù)磕潮,好像是緩存天數(shù)的設(shè)置,但是我生成的framework包中容贝,其方法是這樣的:
void appender_open(TAppenderMode _mode, const char* _dir, const char* _nameprefix, const char* _pub_key);
所以在調(diào)用 appender_open 時(shí)自脯,最好看一下你生成的framework包中的方法具體是要傳那些參數(shù)。
解壓部分斤富,前提
膏潮,保證解壓腳本,和需要被解壓的日志文件满力,在同一目錄下焕参,解壓腳本位置:mars/mars/log/crypt/decode_mars_nocrypt_log_file.py (加密解壓腳本同路徑下,Test_20190426.xlog是你生成的日志文件油额,可以在控制臺(tái)的log中找到logPath叠纷,然后定位文件)
- 解壓不加密日志
python decode_mars_nocrypt_log_file.py Test_20190426.xlog
- 解壓加密日志
python decode_mars_crypt_log_file.py Test_20190426.xlog