美文网首页
Mars-日志模块xlog for React-Native (

Mars-日志模块xlog for React-Native (

作者: 太阳的小号 | 来源:发表于2019-04-30 17:45 被阅读0次

    本文主要介绍Mars-xlog的使用过程(iOS),与react-native相关部分,则参考了react-native-xlog,暂不做详细介绍

    1. 生成mars.framework

    • 首先安装 cmakeXCode 以及 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
    

    2.对单条日志格式进行修改,和bitcode问题

    Mars-日志模块xlog for React-Native (iOS)(2)

    相关文章

      网友评论

          本文标题:Mars-日志模块xlog for React-Native (

          本文链接:https://www.haomeiwen.com/subject/vspvnqtx.html