添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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 日志。

adb logcat 就组成了远程调试输出 log 的工具。😓

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

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

语法格式

logcat 的语法格式

1
logcat [options] [filterspecs]
设置过滤器 -v format 设置日志打印格式 -f filename 日志输出到指定文件 -r kbytes 每 kbytes 输出日志,与-f一起使用 -n count 设置日志最大数目 -b buffer 加载日志缓冲区 在不同的缓冲区日志之间添加分割线 清除缓冲区并退出 打印缓冲区的log,并退出 打印环形缓冲区大小 -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 打印上次启动之前的日志 输出二进制日志 -P list. 设置 log 黑白名单 获取 log 黑白名单

-s

设置默认过滤器。

1
adb logcat -s <tag>[:priority]

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

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

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

1
2
3
adb logcat -s test
#或者
adb logcat -s test:V

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

1
adb logcat -s *:W

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

1
adb logcat -s test:E test1:W

-v

设置日志打印格式。

1
adb logcat -v <format>

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

各种输出格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#Java 代码
#private final static String TAG_0 = "sth0";
#Log.v(TAG_0, "0 Send a verbose log message");

#命令
# adb logcat -v <format> -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到指定文件。 <filename> 是手机内的文件,并不是调试用的电脑。

1
adb logcat -f <filename>

-r

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

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

-n

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

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

-b

加载日志缓冲区, <buffer> 的值有 main system radio events crash all 。默认 main system crash

1
adb logcat -b <buffer>

例,加载 radio events

1
adb logcat -b radio -b events

-D

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

1
adb logcat -D

-c

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

1
adb logcat -c

-d

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

1
adb logcat -d

-g

打印缓冲区大小。

1
adb logcat -g

-G

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

1
adb logcat -G <size>
1
adb logcat -G 100K

-t

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

1
2
adb logcat -t <size>
adb logcat -t '<time>'

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

1
adb logcat -t 1000 -s sth0:V

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

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

-T

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

1
2
adb logcat -T <size>
adb logcat -T '<time>'

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

1
adb logcat -T 1000 -s sth0:V

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

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

-L

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

1
adb logcat -L

-B

输出日志的二进制格式。

1
adb logcat -B

-S

输出统计信息。

1
adb logcat -S

-P

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

1
adb logcat -P '<list>...'

例1,对 UID 520881设置。

1
adb logcat - P '520881'

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

1
adb logcat -P '~/520881'

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

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

-p

查看黑白名单。

1
adb logcat -p

进阶

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

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

利用 grep 过滤日志。

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