1.先来看最感兴趣的adb日志
首先来了解一共概念,安卓的日志有那些:
Android 系统的日志分为两部分,底层的 Linux 内核日志输出到 /proc/kmsg
,Android 的日志输出到 /dev/log
。一般我们说的adb logcat看的都是android的日志
使用adb shell dmesg 可以能看Android的内核日志,内核日志我们可以做一些事情,比如衡量内核启动时间,在系统启动完毕后的内核日志里找到 Freeing init memory
那一行前面的时间就是。
内核启动时间看了有啥用呢?
科普文章链接:https://blog.csdn.net/u010164190/article/details/51396485
作为测试做常用的adb查看日志命令:
- adb logcat -v time 打印log的详情日志
- adb logcat -v time > D:\log.txt 把日志输出到电脑的上查看,在窗口打印的同时,文件也会同时打印的
- adb logcat -c 清除之前的日志信息,一般在看日志前都会执行这个命令,目的是好看日志,不然前面的日志应该会超级多,不好看问题
2.过滤规则
有两种规则,一种是按照日志级别过滤,一种是按照日志中的tag过滤,当然会有混合日志和tag在一起过滤
过滤格式:
adb logcat <tag>[:priority]
tag表示标签,priority输出的级别,注意如果要是要根据级别查看时记得要tag一定要给,如果没有指定,那个tag哪里输入*号就行了
日志级别过滤:
默认级别为V,输出人日志最低,日志级别最低
D —— Debug
I —— Info
W —— Warning
E —— Error
F —— Fatal 致命
S —— Silent(最高,啥也不输出)
实例:比如想要查看手机的级别为错误的日志
adb logcat *:E(不区分大小写)
tag级别过滤:
用这个过滤首先要知道手机上的tag,可以用这个命令查看手机日志的tag
adb logcat -v tag
输出后格式会是:<priority>/<tag>: <message>
但是在日志中的tag究竟是什么意思呢?标签,顾名思义,但是还是不明白,后面明白再来看这快
现在我要知道的就是tag如何过滤日志,可以使用下面的命令:
adb logcat ActivityManager:I
发现tag过滤并没有生效,为啥??
而网上下面这个命令却是生效的:
adb logcat ActivityManager:I PowerManagerService:D *:S
组合起来的使用其实再这里也讲了
3,使用管道进程来查看日志,这个应该是最好的
adb logcat | grep MyApp
adb logcat | grep -i myapp #忽略大小写。
后期强大的话,还可以使用正则表达式来学习
再windows上不能使用grep关键字,而是应该用findstr
只抓取某个app的命令
adb logcat | findstr app进程号
如何只查看某个app日志的方法
- adb shell pm list packages -3 查看非系统第三方应用包名
- adb shell ps | findstr vchat.A 查看包名进程
- 根据进程来查看过滤app的日志
adb logcat | findstr vchat.A
遇到问题:查看app日志时,日志打印到一半莫名报错,写入错误?
原因如下:adb logcat findstr
有时候会出现 写入错误,需要设置一下语言编码CHCP 65001
,设置为UTF-8
编码
命令行中,有个命令是chcp,这个命令是用来显示当前活动代码页编号的,
- ANSI的编码环境的代号是936
- utf-8编码的65001
执行:CHCP 65001
就设置成utf-8编码的了
其他常用命令:
一、把日志输出到手机指定目录
adb logcat -f / sdcard/zjdata.bredbaby/log/1.txt
二、很多没用的一起加载,如果只想抓取被测app的日志,就需要对包名进行过滤,使用find过滤包名
adb logcat find | "vchat.A"