以Android手机为例,安装了微信应用后,在安卓手机的文件夹tencent/MicroMsg下面有一个神秘的文件夹xlog。里面是大小不等的以xlog结尾的文件。
这些xlog文件的作用是什么?
在百度上以关键字“微信 xlog”搜索,得到的答案大多是把这些xlog文件当成微信语音聊天记录的语音片段文件。
作为一个程序员,我不是很赞同这种看法。我的看法是,这些xlog文件是微信应用里不同组件生成的(日志?)文件。理由如下。
为了方便研究,我将我手机上微信xlog文件夹下的全部xlog文件都拷贝到了电脑上,细细研究。总共有292MB大。
我将这些xlog文件以名称排序,得到一些有趣的发现。大家先观察一下,发现了什么规律么?
规律1:这些xlog文件的文件名有个规范,即<微信服务名>_<日期>。我把出现在xlog文件名头部的服务名罗列如下:
APPBRAND
EXDEVICE
MM
PUSH
SANDBOX
SUPPORT
这些服务正是我们能在Android手机的设置->应用程序->微信->内存使用里能看到的详细信息,大家比较一下。注意下图显示的大小为手机运行时这些服务实时消耗的内存空间,而不是xlog里对应的xlog文件总的大小。
规律2:尽管这些xlog名字头部的服务名不一样,但是后半部分的日期,全部都是从2018年7月6日开始,到7月16日结束。如果把这些xlog文件解释成语音聊天的记录文件,就太牵强了。因为这11天期间我有几天根本没有发出或收到语音格式的消息。如果大家做过程序开发,就能敏感地联想到,这种存储行为和很多日志系统很类似。
比如常用的log4j。我们常用下面这种日志配置:
log4j.appender.R.MaxFileSize=100MB
log4j.appender.R.MaxBackupIndex=11
上述配置的含义是,在系统任意时刻,最多维护11个日志文件,每个文件的大小上限为100MB。如果超过,会自动删除最旧的一个文件,同时创建一个新文件。
这和我们计算机专业课上学的LRU(Least Recently Used)—— 最近最少使用的缓存淘汰算法思路一致。
综合这两个规律,我认为这些xlog文件是微信对应服务组件自动生成的文件。
大家知道出于安全性考虑,日志文件是绝不能记录一些敏感信息,比如用户名和密码之类。
然而大名鼎鼎的twitter居然犯了低级失误。大家百度“twitter 日志泄密”,即可找到对应的新闻:
Twitter自己承认,由于一个漏洞,导致Twitter在用户密码加密前会将密码的明文写入一个内部的日志文件中。
这个消息一爆出,业界一片哗然,导致Twitter股票暴跌。
而微信xlog文件夹里的这些xlog文件都是经过加密的,不会存在安全性问题,大家可以放心使用。
xlog更多的内幕,应该只有等腾讯内部的微信开发者才能给大家分享了。