adb过滤只查看某一个app的日志

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查看日志命令:

  1. adb logcat -v time 打印log的详情日志
  2. adb logcat -v time > D:\log.txt 把日志输出到电脑的上查看,在窗口打印的同时,文件也会同时打印的
  3. adb logcat -c 清除之前的日志信息,一般在看日志前都会执行这个命令,目的是好看日志,不然前面的日志应该会超级多,不好看问题

2.过滤规则

有两种规则,一种是按照日志级别过滤,一种是按照日志中的tag过滤,当然会有混合日志和tag在一起过滤

过滤格式:

adb logcat [: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

输出后格式会是:/:

但是在日志中的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日志的方法

  1. adb shell pm list packages -3 查看非系统第三方应用包名
  2. adb shell ps | findstr vchat.A 查看包名进程
  3. 根据进程来查看过滤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"

你可能感兴趣的:(adb过滤只查看某一个app的日志)