聊聊微信 Xlog
作者&投稿:旗泪 (若有异议请与网页底部的电邮联系)
本文介绍 MARS xlog 使用以及使用过程中踩过的坑
xlog 是微信开源框架 MARS 的一部分, 处理应用日志
微信的对 xlog 的介绍文档--「 微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog) 」
总结出来就是
MARS 的 GitHub 上介绍比较详细,
先跑起来一个 Demo 之后, 需要深入了解一下
mmap 是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。
正如微信的介绍文章中所说的:
mmap 是使用逻辑内存对磁盘文件进行映射,中间只是进行映射没有任何拷贝操作,避免了写文件的数据拷贝。操作内存就相当于在操作文件,避免了内核空间和用户空间的频繁切换。
mmap几乎和直接写内存一样的性能,而且 mmap 既不会丢日志,回写时机对我们来说又基本可控。
上文中有关于该方法的源码分析, 总结来说
因为 Android 手机 CPU 架构的差异, 可能会有很多版本的 so 文件, 如果你是使用本地编译 xlog 的, 你应该注意对应不同 CPU 架构编译不同的 so 文件
本地编译的 so 文件放在 src/jniLibs 目录下, AS 可以自动编译到 apk 中
我的坑主要是因为 xposed 的原因, 刚开始 Demo 很顺利, 接入到项目中问题就一个个的
上文以及提到会在哪里加载 so 文件, 但是由于 xposed 的原因, Classloader 指向的文件为 /data/app/io.communet.ichater-2/base.apk , 不能找到指定的 so 文件, 所以需要指定绝对路径
解决:
微信有提到关于日志同步和异步两种写入方式以及日志文件的存储位置
实际运行中发现, 当同步写入时, 日志文件开始会被存放在 cacheDir, 一段时间后, 会被放到 logDir, 但是异步模式下, 文件一直放在 cacheDir, 即便调用 appenderFlush 方法, 日志会从 mmap 中写入文件, 但是文件的位置还是在 cacheDir, 当然, 应用有读写 SDCard 的权限
解决:
该问题还未查明原因, 目前的解决方法是不给 cacheDir, 文件会被直接放到 logDir, 但是, 官方说如果不给 cacheDir, 可能出现 SIGBUS, 参见 issue#249
2019/4/17更新: 解决了, 说起来都惭愧, 还有一个参数
将该值设置为 0 即可, 之前以为这个值表示的是缓存日志保存的天数, 设置了 7, 实际上保留缓存日志的天数默认 10 天, 清理逻辑如下
注意和上文中的那个 BUG 区分, 这里是因为用 32 位的 so 代替 64 位的 so 导致的
解决:
jniLibs 下面不要放 64 位的, 只放 32 的, 可以兼容
还有坑的话继续更新
征鲍复甘: 微信聊天中@某人的方法如下:1、首先打开微信,登录账号.2、找到聊天的群组,点击进去.3、在群组里找到某人,如果想@的人没有在聊天,就点击右上角白色人头像,进去里面找到全体成员,找到某人后发信息.4、按住想要@的某人的头像,一直按着,直到他的号码出现在输入框中.5、然后再输入想要发的信息,等对方开启微信后会在群里看到你给他发的信息.
濠江区15692001669: 微信聊天时名字前怎么加@符号 - ?
征鲍复甘: 1. 登录你的微信账号,找一个你的微信好友,打开你与你微信好友的聊天页面,如图所示. 2. 选择你想要添加到名字中的特殊符号,我以@为例. 3. 点击玫瑰之后,出现在对话框上,在长按对话框,出现“选择”与“全选”选项,你点击“...
濠江区15692001669: 刚刚加了一个女孩的微信该如何聊天才不尴尬??
征鲍复甘: 1、如果你刚加一个女生的微信,最直接了解的办法就是通过她的朋友圈,可以简单的知道她平时喜欢干什么事情、吃什么,从而能由此切入话题.2、可以用一些比较幽默...
濠江区15692001669: 微信聊天男女聊性有什么后果? - ?
征鲍复甘: 要么是没有什么事情发生,就当是聊聊天,要么最后就啪啪啪了
濠江区15692001669: 和刚认识女生聊微信没话题怎么办 - ?
征鲍复甘: 一般同意你添加的,多半都 有聊天的欲望,排除那些打广告,推销业务的.刚刚认识的,可以考虑聊下面的话题 :1)聊些生活上身边开心的事. 2)多问下她今天都发生了那些事. 3)当她问到你找她有什么事时,找你聊聊,慢慢就聊开了.
濠江区15692001669: 跟女朋友聊微信 聊一聊就不知道说什么跟尴尬 求大神指点 - ?
征鲍复甘: 你们是刚谈,还是什么情况? 若是刚谈的话, 不知道聊什么,就说说你自己啊~ 讲讲你的事,再聊聊她的事,或者聊聊八卦,或者她想说的八卦等等都可以啊~ 若是已经谈了很久了,就没必要刻意找话题,不聊天,也不一定尴尬的,主要还是看你们的氛围的~
濠江区15692001669: 怎样设置微信聊天背景 ?
征鲍复甘: 品牌型号:vivoY73s系统:Funtouch OS_10.5软件版本:微信8.0.16 以微信8.0.16为例,设置微信聊天背景可以分为5步,具体步骤如下: 1 进入微信设置 !-- 1第1步 进入微信设置 --打开手机微信,点击右下角的我,选择设置.2 进入聊天背景 !-- 2第2步 进入聊天背景 --点击聊天,选择聊天背景.3 选从相册中选择 !-- 3第3步 选从相册中选择 --进入页面后,点击从相册中选择.4 点击图片使用 !-- 4第4步 点击图片使用 --进入到相册界面,选择图片,点击使用.5 选择应用到聊天场景 !-- 5第5步 选择应用到聊天场景 --将选择的背景图应用到所有聊天场景,点击确定即可.
濠江区15692001669: 微信聊天记录数据库在哪个文件夹 - ?
征鲍复甘: 用手机的USB线将手机和电脑连接 连接好以后打开桌面上的“我的电脑”打开电脑以后会看到多了两个移动磁盘,一个是手机内存,一个是你手机的内存卡一般微信在安装的时候默认都会安装的手机的内存里,打开你手机内存的磁盘打开以后找到“tencent”这个文件夹,打开这个文件夹打开以后再点击“MicroMsg”,打开这个文件夹 打开以后看到文件夹名字很长的就是微信聊天记录存放的文件夹,每登陆一个微信就会产生一个名字很长的文件夹
濠江区15692001669: 微信聊着聊着怎么需要验证好友 - ?
征鲍复甘: 说明对方删了好友. 1. 除了群聊,单独聊天的窗口必须双方互为好友才能聊天. 2. 微信通信录--新的朋友,点击右上角的 + ,输入对方的手机号、微信号等进行搜索. 3. 搜索到之后,点击 添加好友. 4. 对方会收到新好友通知,点击“添加”就成为好友了. 5. 如果一方将对方从通信录中删除,对方通信录不会有变化,但是聊天时消息发送失败,提示需要验证好友. 6. 点击验证,又会重新收到新的好友验证,只有通过了才能继续聊天.
濠江区15692001669: 和女朋友微信聊天的话题,越多越好 - ?
征鲍复甘: 聊聊她的工作,聊聊学习,聊聊她的化妆品,面膜什么的,还有你们之间的共同经历的事情