当前位置: 首页 > 工具软件 > XLog > 使用案例 >

Mars XLog日志模块集成

文增
2023-12-01

学习背景:

查看官网教程,有点蒙,搜集各个大牛博客以及维基百科整理一下,在此记录方便以后查看
    
资源整理:    
    
Mars源码下载:
Github链接:(有时候网真的不行啊)https://github.com/Tencent/mars
网盘链接: https://pan.baidu.com/s/1tNKH937ncLArsHrjwWTkgg 提取码: z5aq

pyelliptic-百度网盘链接: https://pan.baidu.com/s/1BqFbFyyZMWv3jjCF8ywGxg 提取码: tgen

环境配置: JDK + NDK + Python + CMake

运行环境:
1. 系统:Ubuntu20.04 LTS 64位
2. Android Studio 4.0

配置环境:
Ubuntu配置环境主要操作 bashrc 文件,常用的两个命令:
    打开bashrc文件:sudo gedit ~/.bashrc
    使bashrc文件改动立即生效:source ~/.bashrc
   
1. 配置jdk环境
    
2. 配置ndk环境:
   下载android-ndk-r20b(其它版本会出现编译错误的问题),下载网址:https://developer.android.com/ndk/downloads/older_releases
   配置环境变量:
     命令1:Ctrl + Alt + T 打开终端,输入命令:sudo gedit ~/.bashrc
        在文本最下方加入ndk环境配置:
        #ndk
		export NDK_ROOT=/../../android-ndk-r20b
		export PATH=$PATH:$NDK_ROOT
	 命令2:验证ndk环境是否配置成功
        输入命令:ndk-build -v 
            
3. 配置CMake环境
	 命令1:安装Cmake
            sudo apt-get intsall CMake
     命令2:验证CMake是否安装成功
            cmake --version
            
4. 配置Python环境             
	 命令1:安装Python
            sudo apt-get intsall python
     命令2:验证CMake是否安装成功
            python

编译指定架构的库

1. 下载mars源码,git仓库地址为:https://github.com/Tencent/mars

2. 进入源码中:mars/mars目录,执行脚本:
	生成armeabi-v7a架构:python build_android.py (默认生成)
	生成arm64-v8a架构:python build_android.py (修改此文件中的arch参数为arm64-v8a)
    
    选择3,然后Enter,只生成xlog模块的库;
    
	其它架构生成方式也是如此;

3. 生成后的库保存在:sample/mars-master/mars/libraries/mars_xlog_sdk/libs目录下;

项目配置:

1. build.gradle(app)--->android标签下加入:

	externalNativeBuild {
		cmake {
        	cppFlags "-std=c++11"
        	abiFilters 'armeabi-v7a', 'arm64-v8a'
    	}
	}

2. 创建与java目录平级别的目录jniLibs,分别将刚生成的两个架构so文件复制进去
    
3. 将xlog的完整路径复制到项目中,与包名同级

4. 项目Application中进行XLog初始化(封装XLog,代替Log进行打印)
   
   //保存路径 
   final String SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
   final String logPath = SDCARD + "/marssample/log";
    
   MarsLog.init(this, "app name", logPath);

    /**
     * 初始化操作
     * 
     * true : 是否加载so库
     * Xlog.LEVEL_DEBUG 或  Xlog.LEVEL_INFO :打印日志的等级
     * Xlog.AppednerModeSync: 同步
     * Xlog.AppednerModeAsync: 异步
     * cachePath: 这个参数必传,而且要data下的私有文件目录,例如 /data/data/packagename/files/xlog, 
     * mmap文件会放在这个目录,如果传空串,可能会发生 SIGBUS 的crash。	
     * logPath : xlog文件保存的路径
     * namePrefix: 一般填写项目名称
     * pub_key : 加/解密 用到的key (此处未加密)
     */
   public class MarsLog {

    public static void init(Context context, String namePrefix, String logPath) {
        String cacheDir = context.getFilesDir() + "/xlog";
        if (BuildConfig.DEBUG) {
            Xlog.open(true, Xlog.LEVEL_DEBUG, Xlog.AppednerModeAsync, cacheDir, logPah, namePrefix, "");
            Xlog.setConsoleLogOpen(true);
        } else {
            Xlog.open(true, Xlog.LEVEL_INFO, Xlog.AppednerModeAsync, cacheDir, logPah, namePrefix, "");
            Xlog.setConsoleLogOpen(false);
        }

        Log.setLogImp(new Xlog());
    }
    
       此处也可以重新Log中打印的方法,使用MarsLog.v的形式进行日志打印,皆可
       
 }   

5. 在文件需要导出之前,手动调用以下代码,将缓存区的日志刷新到文件存储里面,确保日志完整
	 Log.appenderFlush();
	 
6. 在程序完全退出时,进行初始化,加入代码:
     Log.appenderClose();

打印XLog与查看Xlog

1. 直接在项目中打印xlog,打印完毕,在logcat日志模块成功看到日志;
   使用studio自带Device File Explorer 工具,进入data/data/当前包名/files/log , 即可查看到xlog ,右键save as到本地
   
2. 找到之前下载好的mars源码,寻找目录   mars-master/mars/log/crypt目录下,其中有两个文件我们将要使用:
	decode_mars_crypt_log_file.py :使用此脚本可以打开 加密 的xlog文件
	decode_mars_nocrypt_log_file.py : 使用此脚本可以打开 未加密 的xlog文件
	
	当前我们生成的是没有加密的xlog文件,在mars-master/mars/log/crypt目录下,打开终端,命令行输入:
	python decode_mars_nocrypt_log_file.py + 导出到本地的xlog文件路径 ,
    
    此时会在xlog文件同级的目录下,生成一个与xlog文件名称相同的 .xlog文件,使用文本编辑器 即可查看刚打印的日志
    
   

Xlog日志的加密与解密

1. 安装 openssl
	命令:sudo apt-get install openssl
	
2.下载 pyelliptic1.5.7

	pyelliptic1.5.7 不支持 openssl 1.1 版本,会报以下错误:
	AttributeError: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: undefined symbol: ECDH_OpenSSL
	
	安装下面这个打补丁的版本
	pip install https://github.com/mfranciszkiewicz/pyelliptic/archive/1.5.10.tar.gz#egg=pyelliptic
	百度网盘链接: https://pan.baidu.com/s/1BqFbFyyZMWv3jjCF8ywGxg 提取码: tgen
	
3. 复制文件到指定位置
     openssl安装完毕 且 pyelliptic1.5.7补丁版下载完毕,进入重要一步:

	解压:pyelliptic1.5.7,进入其根目录下,将其所有文件复制到 mars源码的 mars-master/mars/log/crypt目录下,
	
	执行命令:python gen_key.py,会生成private_key 和 appender_open`s parameter 两个key
	
	使用文本保存好这两个key,接下来要用;

4. 将上一步得到的key设置到 mars-master/mars/log/crypt中的decode_mars_crypt_log_file.py脚本中,如:

	#PRIV_KEY : private_key
	#PUB_KEY : appender_open`s parameter
	
5. 把 pulic key作为appender_open 函数参数设置进去,private key务必保存在安全的位置,防止泄露
	
	public class MarsLog {
	 
	 final String pub_key = “”;
   	 public static void init(Context context, String namePrefix, String logPath) {
        String cacheDir = context.getFilesDir() + "/xlog";
        if (BuildConfig.DEBUG) {
            Xlog.open(true, Xlog.LEVEL_DEBUG, Xlog.AppednerModeAsync, cacheDir, logPah, namePrefix, pub_key);
            Xlog.setConsoleLogOpen(true);
        } else {
            Xlog.open(true, Xlog.LEVEL_INFO, Xlog.AppednerModeAsync, cacheDir, logPah, namePrefix, pub_key);
            Xlog.setConsoleLogOpen(false);
        }

        Log.setLogImp(new Xlog());
    } 
    

验证加密,验证解密

1. 导出加密的日志:

	卸载之前运行的程序,加入pub_key参数运行程序,按照之前的方法,
	使用studio自带Device File Explorer 工具,进入data/data/当前包名/files/log , 即可查看到xlog ,右键save as到本地

2. 错误的解密方式:
	使用不加密decode_mars_nocrypt_log_file的脚本,对xlog进行解密,
		命令1 :python decode_mars_nocrypt_log_file.py + 导出到本地的xlog文件路径 ,查看刚打印的日志
		提示:use wrong decode script ,这是因为xlog已经加密了,使用这个nocrypt的脚本错误导致的,需要使用另一个脚本
		
3. 正确的解密方式:(确保private_key和pub_key设置正确)		
		命令1:python decode_mars_crypt_log_file.py + 导出到本地的xlog文件路径 ,查看刚打印的日志 
		
 类似资料: