1. 根据TAG和Log优先级过滤
```
adb logcat [TAG:LEVEL ] [TAG:LEVEL ] ...
```
>例如:输出TAG为 debug, 优先级为 D以上的Log:
adb logcat debug:D
[TAG:LEVEL ] 不会影响其他标签的日志, 所以如果要屏蔽其他log请使用 *:S
adb logcat Debug:D *:S
优先级,从低到高依次是:
V — 明细 verbose(最低优先级)
D — 调试 debug
I — 信息 info
W — 警告 warning
E — 错误 error
F - fatal
2. 采用grep过滤
例如:匹配行中的任意位置到的字符串
adb logcat | grep MyApp
adb logcat | grep -i MyApp // 忽略大小写
设置为仅匹配 TAG
adb logcat | grep "^..MyApp"
3. 清空Log
adb logcat -c
logcat的原理
安卓日志存放在main缓冲区文件里;部分会存在其他缓存文件里。
logcat其实就是读取缓冲区文件,实时的输出文件信息。
因此,思路就是,在输出文件信息的时候对信息进行正则表达式的过滤。
所以,针对logcat或者使用pidcat的通用语句如下:
adb logcat [option] [<filter-spec>] | grep '需要查询的信息'
pidcat 包名| grep '需要查询的信息'
例如:只显示com.jingdong的日志信息,同时只能是包含'http'的信息
用pidcat写命令如下:
pidcat com.jigndong | grep 'http'
用logcat写命令如下:
adb logcat | grep 'http'
logcat 常用命令
adb logcat -c 清除所有以前的日志
adb logcat -d 这个命令是在时间上倒过来用的 就是你先操作 然后敲这个命令 打出来的log就是你刚操作那段时间的log 而且自动退出log模式
adb logcat -s XXX这个是设置过滤用的 比如你只想查看FirstDemo的日志 就替换最后的XXX
adn logcat -f /sdcard/test.txt 输出日志到某个目录文件
V-Verbose 级别最低,开发调试中的一些详细信息,不常见
D-Debug 调试,调试信息,开发中经常选择输出此种级别的日志,较常见
I—Info 信息,该等级日志显示运行状态信息,可在产品出现问题时提供帮助,从该级别开始的日志通常包含完整意义的英语语句和调试信息,是最常见的日志级别。
W—Warning 警告,运行出现异常即将发生错误或表明已发生非致命性错误,该级别日志通常显示出执行过程中的意外情况,例如将try-catch语句块中的异常打印堆栈轨迹之后可输出此种级别日志。
E—Error 错误,已经出现可影响运行的错误,比如应用crash时输出的日志。
F—Fatal 严重错误,比error级别更高,目前只在android系统内核发出的日志中看到此种级别。
S—Silent 寂静,最高级别,没有一条日志会属于这个级别,仅仅作为关闭logcat输出的过滤器参数
1、定位及分析崩溃问题
定位android应用崩溃问题,主要在日志中搜索fatal关键字,搜索到fatal关键字后,查找上下文中输入的信息是否是当前测试app进程的包名,如果是的话,可以定位次出崩溃时由当前app引起,具体导致崩溃的原因需要具体再分析日志。如上图所示,搜索到fatal关键字,并发现进程名是测试app的进程名,接下来分析导致崩溃的原因可以发现是因为启动一个activity失败导致的崩溃,分析到这里可以将日志提供给开发来解决此问题。
2、定位及分析无响应问题
定位Android应用发生无响应的问题,同理,主要在日志中搜索anr关键字。如果查找到anr关键字的话,需要在获取额外的trace文件来辅助分析问题。
可通过命令行adbpull /data/anr/trace.txt 来获取trace文件。具体分析虚拟机信息,搜索Dalvik Thread关键词,快速定位到本应用程序的虚拟机信息日志。