本文主要介绍Mars-xlog的使用过程(iOS),与react-native相关部分,则参考了react-native-xlog,暂不做详细介绍
1. 生成mars.framework
-
首先安装
cmake
和XCode
以及python2.7
,macOS系统默认安装了python,只要确定版本号在2.7.*即可,cmake可以在网上搜安装教程。 -
到Mars下载最新的代码,master分支。
-
该项目的目录分支如下图,你需要cd到mars文件夹下,即:mars/mars目录
514A8B6C-AEF8-477A-9DE9-F4F3733D9E6E.png
-
在mars/mars目录下面,跑官方提供的脚本,脚本文件都在这个目录下面都有,使用下面的命令行,会出现一个菜单选项,看个人需要,我选择的是
2
,运行等待结束,会输出一个mars.framework,在命令行结束时会提供该包的输出路径cmake_build/iOS/Darwin.out/mars.framework
python build_ios.py
2. 在项目中,添加配置资源
-
将
mars.framework
直接拖拽到你的项目中,因为我只使用了xlog功能,所有些文件是不需要加到项目中的,否则你在运行时会报错duplicate **----什么什么的
,我只添加了LogUI
之类的4个文件,还有需要link的一些libraries,请看图中文字说明。
E90163FC-CE8A-4CED-8A70-1FAD38F2D673.png
-
保证你的项目build时能够success,然后开始使用
3.xlog使用(具体的可以去官方文档查看,这边就简单复制一些主要的代码)
- 推荐在 main.mm 的 main 函数里初始化:
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 函数中反初始化:
appender_close();
- 需要注意:
保存 log 的目录请使用单独的目录,不要存放任何其他文件防止被 xlog 自动清理功能误删。
请把 log 目录设上不备份的标识。
debug 版本下建议把控制台日志打开,日志级别设为 Debug, release 版本建议把控制台日志关闭,日志级别使用 Info.
直接include xlog头文件的 oc 文件名后缀一定要是 .mm 不要使用 .m
4.我遇到的问题
- 需求,把日志文件上传到服务器,在
RN
页面上,一直红屏报错,说没有权限操作document文件夹下面的文件,最后在终端敲了下面一段命令行才好,log
是我在document文件夹下创建的下级目录,下面的命令行要cd 到document路径下
sudo chmod -R 777 log/
ls -l log
****未完待续****
2019-05-13 接上文
1.日志解压问题
官网明确指出,如果不想使用加密模块或者环境配置不成功,public key 参数设置为空字符即可,解密脚本使用 [decode_mars_nocrypt_log_file.py](https://github.com/Tencent/mars/blob/master/mars/log/crypt/decode_mars_nocrypt_log_file.py), 但这样日志会只压缩不加密。
即调用 appender_open
方法时,最后一个参数 _pub_key
传入空字符:
appender_open(mode, [logPath UTF8String], [nameprefix UTF8String], "");
官网文档中给的 appender_open 方法多了一个参数,好像是缓存天数的设置,但是我生成的framework包中,其方法是这样的:
void appender_open(TAppenderMode _mode, const char* _dir, const char* _nameprefix, const char* _pub_key);
所以在调用 appender_open 时,最好看一下你生成的framework包中的方法具体是要传那些参数。
解压部分,前提
,保证解压脚本,和需要被解压的日志文件,在同一目录下,解压脚本位置:mars/mars/log/crypt/decode_mars_nocrypt_log_file.py (加密解压脚本同路径下,Test_20190426.xlog是你生成的日志文件,可以在控制台的log中找到logPath,然后定位文件)
- 解压不加密日志
python decode_mars_nocrypt_log_file.py Test_20190426.xlog
- 解压加密日志
python decode_mars_crypt_log_file.py Test_20190426.xlog
网友评论