微信Mars-xlog日志加解密踩坑指南

网上有类似的帖子了,为什么我还要再重复造轮子?

网上的帖子大多是几年前的,而现在已经是24年了,有些环境现在都不在了。

环境

安装python2

本人是linux(manjaro)环境,首先需要安装python2.7,直接运行

sudo pacman -Ss python
或
yay -S python2

安装好之后版本为 Python 2.7.18

创建venv

这里我用的pycharm生成的venv环境,对python命令行不熟悉的人来说,pycharm真是神器。

创建密钥

在Mars源码目录下找到mars/mars/log/crypt/gen_key.py

安装依赖:

1. pyelliptic 最新版本

venv2.7/bin/pip install pyelliptic

   如果你遇到了 “AttributeError: 'module' object has no attribute 'ECC'” 错误 ,请安装如下版本

venv2.7/bin/pip install bloxroute-pyelliptic

2. 确保已安装openssl。linux自带的应该就有,可遇到问题的时候再安装。

执行gen_key.py文件 

$ venv2.7/bin/python2.7 gen_key.py

save private key
******************

appender_open's parameter:
********************************************

将私钥和公钥分别配置到decode_mars_crypt_log_file.py中

...
PRIV_KEY = "*************"
PUB_KEY = "****************"
...

修改xlog初始化代码

Xlog.open(true,
                Xlog.LEVEL_DEBUG,  //日志打印级别
                Xlog.AppednerModeAsync,  //日志同步方式
                cachePath,  //缓存路径
                dir,  //日志储存路径
                "xLog",  //日志文件前缀
                "*********pub key*********"
            )

解密日志文件

venv2.7/bin/python2.7 mars/log/crypt/decode_mars_crypt_log_file.py xx_20211118.xlog

如果不需要解密,则可直接使用“mars/mars/xlog/crypt/decode_mars_nocrypt_log_file.py
”脚本解压缩日志。

遇到的问题

解密xlog日志后,发现日志不是最新的,跟当前时间有一定间隔。

     该问题可能有几个原因:

        1. 如果写日志的进程处于运行状态,日志还在内存中缓存着,还没有刷新到mmap3文件中。

        2. 如果写日志的进程已经处于停止状态,那最新日志肯定就在mmap3文件中了,单单解密xlog文件是看不到最新的日志的。

 几种解决方案:

1. 杀掉进程:这时缓存中的日志会刷新到mmap3文件中。重新启动:日志会从mmap3文件转存到xlog文件中。这时再获取xlog文件解密就可以读取到杀掉进程时的最新日志。

2. 在应用进入后台时(这个需要自己实现,有人说xlog实现了该接口,但是我实测没有效果),调用appenderFlush方法,刷新日志到xlog文件中。

3. 假设现在mmap3中已经存在最新日志并且也有xlog文件,有没有办法同时解密mmap3和xlog文件呢?当然有。把mmap3文件和当前的xlog文件放在一个目录中,然后执行如下命令。

cat xLog.mmap3 xLog_20240828.xlog > aa.xlog && venv2.7/bin/python2.7 mars/mars/xlog/crypt/decode_mars_nocrypt_log_file.py  aa.xlog

最终mmap3和xlog的日志一起解密好的内容就在aa.log中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值