Adb抓取日志并分析

  • 1.缓冲区的类型
  • 2.认识输出日志信息
  • 3.日志的优先级及指定输出
  • 4.控制日志的输出格式
  • 5.抓取指定apk的日志
  • 6.日志异常查找


1.缓冲区的类型

Android 日志系统为日志消息保留了多个循环缓冲区,不是所有的消息都被发送到默认缓冲区,要想查看这些附加的缓冲区,可以使用 -b选项,查看指定的缓冲区:

adb logcat [-b <buffer>]

buffer可以有如下选项:

Radio                 查看包含在通信系统的log,如蓝牙、wifi、打印.
Events                查看事件相关的消息,比如启动应用,停止文件 事件.
Main                  查看主缓冲区、所有Java层的log(默认缓冲区).
System                输出系统组件的log(默认缓冲区).

ps:默认使用 【adb logcat】会输出Main及System缓冲区的log信息。

2.认识输出日志信息

一般使用默认 【adb logcat】 输出的日志、格式如下:

android记录日志到本地 安卓日志记录器缓冲区_android记录日志到本地


大概就是显示:时间 、进程Id=1164、 线程Id=1181、优先级=D、标签(tag)=WindowManger : message

3.日志的优先级及指定输出

1)日志的等级由小到大为:

V--明细(view) 
D--调式(debug)    
I--信息(information) 
W--警告(warm) 
E--错误(error)  
F--严重错误(fail) 
S--无记载

所以,如果要减少logcat 的输出日志,可以使用如上条件进行过滤、可用多个表达一起限制。

2)过滤表达式的格式为【tag:prority 】、同一个tag可以有不同的优先级.

如:adb logcat ActivityManager:I WindowManager:D *:S

ps:如上会输出 ActivityManager等级大于I的信息、以及 WindowManager等级大于D的信息, 然后 *:S则会过滤其他tag的所有信息,所以最终日志仅会输出ActivityManager和WindowManager的日志。

当然也可以仅过滤某一优先级、如下:最终会输出优先级大于W的所有tag的日志信息。

如【adb logcat *:W】,*代表输出所有tag、过滤优先级大于W的日志信息.

4.控制日志的输出格式

日志消息在标记和优先之外还有很多其他字段,这些字体可以通过修改输出格式来控制输出结果,可以用 【adb logcat -v < format > 】指定日志输出格式。

总体来说,< format >可以有 【brief、process、tag、raw、time、thread、long】等选项,具体的输出格式可以参考

5.抓取指定apk的日志

格式:adb logcat | find "包名“ >电脑地址

adb logcat | find "com.cmic.college" >d:\log.txt

怎么获取包名??

6.日志异常查找

(1)应用程序未响应、又叫anr异常
一般遇到这种异常,就可以在logcat的日志里直接搜索”ANR in",但其实日志多反应不出产生的原因,具体可以产看traces.txt文件,进行分析。

traces.txt文件是一个ANR记录文件,用于开发人员调试,目录位于/data/anr中
,无需root权限即可通过pull命令获取,下面的命令可以将traces.txt文件拷贝到当前目录下

adb pull /data/anr/traces.txt d:\

关于产生ANR的原因可以参考

(2)一般程序异常、可以考虑搜索tag=E 的内容,或者是在logcat日志里试着搜索Exception、或者搜索关键的词语,比如一个app无法在夜神模拟器中登录、并提示如图:

android记录日志到本地 安卓日志记录器缓冲区_搜索_02


这时候我们可以考虑搜索 102208 来查看相关日志.

ps:使用夜神模拟器经常遇到的问题就是【夜神模拟器连不上adb】

android记录日志到本地 安卓日志记录器缓冲区_搜索_03