adb logcat 指北

Nexus 5, Android 6.0.1, API 23

Log类,相信开发 Android 的同学都不陌生,正如其名,Log类提供了打印日志功能,方便我们在开发调试过程中输出调试信息,输出如下:

有大神觉得这样的输出信息不够多,不够美观,不够强大,于是就有了 logger、hugo、timber等 log 工具类。

虽然有这些强大的工具来使用,但是你离开了 IDE 还会看 log 吗?下面我们来介绍 adb logcat的使用。

adb logcat

adb全名叫做Android Debug Bridge,也就是 Android 调试桥。是 Android SDK 提供的一个 DEBUG 工具,在 platform-tools目录下。

logcat是Android系统提供的一个命令行工具,用于输出 log 日志。

adblogcat就组成了远程调试输出 log 的工具。��

把 SDK 的platform-tools配置到了环境变量当中,在任意位置都可以调用adb指令,当然也可以每次都进入到目录下进行调用…

调用logcat指令有两种方式,一种是前面说的,直接adb logcat,另一种是adb shell进入手机的 shell 面板,然后在调用logcat。下面我都会使用adb logcat这种方式进行演示。

语法格式

logcat的语法格式

logcat [options] [filterspecs]

命令参数

参数 描述
-s 设置过滤器
-v format 设置日志打印格式
-f filename 日志输出到指定文件
-r kbytes 每 kbytes 输出日志,与-f一起使用
-n count 设置日志最大数目
-b buffer 加载日志缓冲区
-D 在不同的缓冲区日志之间添加分割线
-c 清除缓冲区并退出
-d 打印缓冲区的log,并退出
-g 打印环形缓冲区大小
-G size 设置环形缓冲区大小
-t count 打印最近 count 行日志,包含 -d 命令
-t time 打印最近从 time 开始的日志,包含 -d 命令,时间格式 MM-DD hh:mm:ss.mmm
-T count 打印最近 count 行日志,不包含 -d 命令
-T time 打印最近从 time 开始的日志,不包含 -d 命令,时间格式 MM-DD hh:mm:ss.mmm
-L 打印上次启动之前的日志
-B 输出二进制日志
-S 输出统计
-P list. 设置 log 黑白名单
-p 获取 log 黑白名单

-s

设置默认过滤器。

adb logcat -s <tag>[:priority]

tag:对应 log 的 tag。值*代表全部,如果只有*,等于*:D,如果仅有,等于:V

priority:优先级,从低到高分别是V,D,I,W,E,F,S。V,全部输出。S,全部输出。

例1,只输出 tag 为 test 的 log:

adb logcat -s test
#或者
adb logcat -s test:V

例2,只输出优先级大于 W 的日志:

adb logcat -s *:W

例3,输出 tag 为 test 的 E 级别 和 tag 为 test1 的 W 级别日志:

adb logcat -s test:E test1:W

-v

设置日志打印格式。

adb logcat -v <format>

format 共有 brief、color、long、printable、process、raw、tag、thread、threadtime、time、usec 格式,默认 threadtime。

各种输出格式如下:

#Java 代码
#private final static String TAG_0 = "sth0";
#Log.v(TAG_0, "0 Send a verbose log message");

#命令
# adb logcat -v  -s sth0:W

#brief
W/sth0    ( 1065): 0 Send a warn log message
#color 其实在 Terminal 里面是有颜色的
08-02 09:38:42.094  1065  1065 W sth0    : 0 Send a warn log message
#long
[ 08-02 09:38:42.094  1065: 1065 W/sth0     ]
0 Send a warn log message
#printable
08-02 09:38:42.094  1065  1065 W sth0    : 0 Send a warn log message
#process
W( 1065) 0 Send a warn log message  (sth0)
#raw
0 Send a warn log message
#tag
W/sth0    : 0 Send a warn log message
#thread
W( 1065: 1065) 0 Send a warn log message
#threadtime
08-02 09:38:42.094  1065  1065 W sth0    : 0 Send a warn log message
#time
08-02 09:38:42.094 W/sth0    ( 1065): 0 Send a warn log message
#usec
08-02 09:38:42.094771  1065  1065 W sth0    : 0 Send a warn log message

-f

输出log到指定文件。是手机内的文件,并不是调试用的电脑。

adb logcat -f 

-r

设置每时输出日志,需要和-f一起使用。

adb logcat -f <filenam> -r <kbytes>

-n

设置日志每次最大输出行,需要和-f一起使用。

adb logcat -f <filenam> -n <count>

-b

加载日志缓冲区,的值有mainsystemradioeventscrashall。默认mainsystemcrash

adb logcat -b <buffer>

例,加载radioevents

adb logcat -b radio -b events

-D

在不同的缓冲区日志之间添加分割线。

adb logcat -D

-c

清除缓冲区日志,并退出。

adb logcat -c

-d

打印缓冲区日志,并退出。

adb logcat -d

-g

打印缓冲区大小。

adb logcat -g

-G

设置缓冲区大小。,以K结尾,单位 kb,以M结尾,单位 MB。

adb logcat -G <size>

例:

adb logcat -G 100K

-t

包含 -d 功能,也就是打印后退出。
打印最近行日志。
打印从'时间开始的日志。时间格式MM-DD hh:mm:ss.mmm

adb logcat -t <size>
adb logcat -t '

例1,打印最近1000行日志,并且过滤出 tag 为 sth0 的日志:

adb logcat -t 1000 -s sth0:V

例2,打印 08-02 17:51:20.145 开始的日志

adb logcat -t '08-02 17:51:20.145'

-T

不包含 -d 功能,也就是打印后不退出,会持续输出。
打印最近行日志。
打印从'时间开始的日志。时间格式MM-DD hh:mm:ss.mmm

adb logcat -T 
adb logcat -T '

例1,打印最近1000行日志,并且过滤出 tag 为 sth0 的日志:

adb logcat -T 1000 -s sth0:V

例2,打印 08-02 17:51:20.145 开始的日志

adb logcat -T '08-02 17:51:20.145'

-L

打印最后一次重启之前的日志。

adb logcat -L

-B

输出日志的二进制格式。

adb logcat -B

-S

输出统计信息。

adb logcat -S

-P

设置黑白名单。可以对 UIDPID设置,也可以UID/PID一起设置。设置黑名单,前缀~

adb logcat -P '...'

例1,对UID 520881设置。

adb logcat - P '520881'

例2,对PID 520881 设置黑名单。

adb logcat -P '~/520881'

例3,对UID 520881,对PID 78883,对 UID/PID 52189/8883 设置黑名单。

adb logcat -P `~520881 ~/78883 ~52189/8883'

-p

查看黑白名单。

adb logcat -p

进阶

利用 shell 重定向输出日志到指定文件。

#输出sth0:V到桌面1.log文件
adb logcat -s sth0:V >~/Desktop/1.log

利用 grep 过滤日志。

# 过滤日志包含 verbose 的日志
adb logcat | grep verbose 
# 过滤日志包含 verbose 的日志,忽略大小写
adb logcat | grep -i verbose
# 过滤符合正则表达式 sth. 的日志
adb logcat | grep -e sth.

你可能感兴趣的:(android)