结构化Log分析

Android开发时Log对问题分析是很重要的。如果APK比较简单,那么用文本编辑器或者Android Studio中自带Log查看器就可以了。但是如果程序比较复杂,各个模块都添加了Log, 如果这时再用文本编辑器来查看Log, 往往就会一头雾水了。特别是对于Anroid系统开发者,Val报了一个Bug后,附带的Log都是整个系统的,往往都是上百兆的。

用文本或者AndroidStudio的Log查看器,只能查看或者简单查找。而QTrace提供了结构化分析Log的工具,简单的说就是,QTrace会把Log编程一个数据库,然后可以进行结构化查询与分析,可以按进程,Tag,时间,关键字进行查找,也可以快速按进程或Tag过滤生成子Log视图。同时由于Log编程一个数据库,还可以使用QTrace提供的脚本框架,方便的编写Log的分析程序。

QTrace Logcat基本用法

1).捕获Log

​ QTrace中点击菜单 文件->Logcat->打开默认Logcat 或者另外新建一个Logcat数据库文件

​ 连接上手机

​ 在Logcat的左侧工具栏面板,点击捕获Logcat按钮[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RJgd7x2c-1596078596850)(https://i.loli.net/2020/07/18/emogZbNFYXKL58J.png)]

​ 在Logcat中就可以看到,Logt打印了

2).导入Log

​ 在Logcat的左侧工具类面板,点击菜单按钮结构化Log分析;

​ 执行导入文件,选择log文件并导入

​ 对于MTK平台Log, 往往有多个文件,可以执行导入Logcat目录,并选择要导入的Log文件,QTrace会完成文件的导入,并对Log进行排序。

3).查看Log

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J3qgGKVe-1596078596856)(https://i.loli.net/2020/07/18/5RWIJEtTlqKChQO.png)]

  • QTrace中,对不同进程的Log都有用不同的颜色进行区分。对于Android系统Log, 是所有程序的log都放在一起的,用这个颜色区分,可以让我们只关注相关进程的Log.

  • QTrace中可以对Log设置书签(快捷键Ctrl+F2), 设置了书签的Log背景为淡黄色。

  • QTrace支持解析event log, event log就是像[99,4262,320]这样的一堆数字,无法直接看出意思的,鼠标放到对应的event log上,就会弹出event log各字段的含义

  • QTrace支持为log添加备注,双击Log, 在Log的开头编辑注释。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w2ieUBK8-1596078596859)(https://i.loli.net/2020/07/18/3i4mj1h2MkrPOTC.png)]

  • QTrace可以方便的选择拷贝Log。 双击Log, 然后选择Log中的文本

  • QTrace会分析pid,得到Pid对应的进程名然后显示。

Log高级功能

1).生成只包含某个进程的Log子视图

选择一条Log

执行右键菜单"过滤LogView"->“添加PID条件”, 点击按钮“在窗口显示”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-StMtkDxm-1596078596860)(https://i.loli.net/2020/07/18/9BFgM5QSmhetIvw.png)]

这样pid为768的log都会显示到一个窗口中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YNO9Ff34-1596078596862)(https://i.loli.net/2020/07/18/dO7qthibGpAZkwX.png)]

当然还可以用tag,时间,log中的关键字来编辑更加复杂的过滤条件,来生成Log子视图.

2).搜索Log

在Logcat中,按Ctrl+F弹出搜索框,可以搜索对应的Log.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mNTOAjdV-1596078596863)(https://i.loli.net/2020/07/18/u3gx2OrZEeMoQLR.png)]

如果点击“显示LogView”, 也会将搜索结果Log显示到一个Log子视图中。跟上一小节的结果一样。

Log脚本分析

QTrace为处理Log提供了较多的脚本,点击 “右键菜单->脚本”, 可以选择对应的脚本,并执行。

下面列几个比较常用的脚本。解决脚本可以快速的分析出问题,并将一些数据可视化,可以让程序员更加快速的找到问题。同时资深程序员也可以将经验写成脚本,用于帮助一般程序员的分析问题。

1.分析Log

点击右键菜单->脚本->分析Log

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OKOpaxg9-1596078596864)(https://i.loli.net/2020/07/18/xPnhrZAcGkQELyO.png)]

选择要执行的脚本,比如"Exception", 点击“运行脚本”, 就会找出所有Exception相关的Log.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-edVsYD3T-1596078596864)(https://i.loli.net/2020/07/18/1Dsdy35UoxmpHut.png)]

2.MemoryGC分析(内存回收分析)

通过对MemoryGC相关的Log进行分析,可以分析内存泄漏等问题。

右键菜单,执行 脚本->MemoryGC图表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vWwCSPPO-1596078596865)(https://s1.ax1x.com/2020/07/20/UfBCEF.png)]

上图这个例子:占用内存Occupy持续变大,这种情况很有可能出现内存泄漏。

另外还需要关注Paused Time,如果Pasued Time太大,那么就可能出现卡顿情况。

3.数据图表化分析

很多Log带有数据,比如电池电量,内存数据,时长, 计数,以及各种Sensor的值, 等等。如果能将这些数据图表化,那么往往就能一眼看出问题。

这里以电池信息为例,来说明下"数据图表"脚本的用法

如下是电池信息的Event log

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JsRHETGb-1596078596866)(https://s1.ax1x.com/2020/07/20/Uf6UhD.png)]

如果直接分析,很难看出电池的变化情况。

选择一条电池Log, 点击右键菜单 “脚本->数据图表”

点击按钮“从当前Log生成”, 这样自动完成数据图表的的分析设置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ldyMWVt7-1596078596867)(https://s1.ax1x.com/2020/07/20/Uf6jgJ.png)]

图表结果如下:

结构化Log分析