“为了更爽的使用logcat,我决定好好研究一下“
1、基本命令
logcat的格式如下
logcat [options] [filterspecs]
比如需要过滤TAG是 “demo” 的log
logcat -s demo
全部命令选项如下
选项 | 说明 |
---|---|
-s |
相当于过滤器表达式 '*:S' 例如: logcat -s demo |
-f <file> |
--file=<file> 设置logcat 内容保存的位置,默认是stdout 例如: logcat -f sdcard/log.txt |
-r <kbytes> |
--rotate-kbytes=<kbytes> 每输出 <kbytes> 时轮替日志文件,默认是16 例如: logcat -f sdcard/log.txt -r 1 |
-b <buffer> |
加载可供查看的备用日志缓冲区,例如 events 或 radio 。默认使用 main 、system 和 crash 缓冲区集。请参阅查看备用日志缓冲区 |
-c |
--clear 清除(清空)所选的缓冲区并退出。 默认缓冲区集为 main 、system 和 crash 。要清除所有缓冲区,请使用 -b all -c 。 |
-e <expr> |
--regex=<expr> 只输出日志消息与 匹配的行,其中 是一个正则表达式。 |
-m <count> |
--max-count=<count> 输出 m 行后退出。这样是为了与 --regex 配对,但可以独立运行。 |
--pid=<pid> ... |
仅输出来自给定 PID 的日志。 例如: logcat --pid=4355 |
-D |
--dividers 输出各个日志缓冲区之间的分隔线。 |
-t <time> |
输出自指定时间以来的最新行。此选项包括 -d 功能。要了解如何引用带有嵌入空格的参数,请参阅 -P 选项。 例如: adb logcat -t '01-26 20:52:41.820' |
-v <format> |
设置日志消息的输出格式。默认格式为 threadtime 。有关支持的格式列表,请参阅介绍控制日志输出格式的部分。 |
-g |
输出指定日志缓冲区的大小并退出。 |
-G <size> |
--buffer-size=<size> 设置log缓冲区的大小,后缀可以是K或者M 例如: logcat -G 2M |
-S |
--statistics 在输出中包含统计信息,以识别和定位日志垃圾信息发送者。(注意,S是大写的) |
-c |
清空(清除)整个日志并退出。 |
-t <count> |
仅输出最新的行数。此选项包括 -d 功能。 |
-t <time> |
输出自指定时间以来的最新行。此选项包括 -d 功能。要了解如何引用带有嵌入空格的参数,请参阅 -P 选项。 例如: adb logcat -t '01-26 20:52:41.820' |
2、控制日志输出格式
可以修改log输出格式,来显示特定的元数据字段,您可以用-v
选项,并指定一下某一受支持的输出格式。
brief
:显示优先级、标记以及发出消息的进程的 PID。long
:显示所有元数据字段,并使用空白行分隔消息。process
:仅显示 PID。raw
:显示不包含其他元数据字段的原始日志消息。tag
:仅显示优先级和标记。thread:
:旧版格式,显示优先级、PID 以及发出消息的线程的 TID。threadtime
(默认值):显示日期、调用时间、优先级、标记、PID 以及发出消息的线程的 TID。time
:显示日期、调用时间、优先级、标记以及发出消息的进程的 PID。
例如:
adb logcat -v time
adb logcat -v time -v tag // 可以指定多字段
您可以通过在命令行中输入 logcat -v --help
获取格式修饰符详细信息。
color
:使用不同的颜色来显示每个优先级。descriptive
:显示日志缓冲区事件说明。此修饰符仅影响事件日志缓冲区消息,不会对其他非二进制文件缓冲区产生任何影响。事件说明取自 event-log-tags 数据库。epoch
:显示自 1970 年 1 月 1 日以来的时间(以秒为单位)。monotonic
:显示自上次启动以来的时间(以 CPU 秒为单位)。printable
:确保所有二进制日志记录内容都进行了转义。uid
:如果访问控制允许,则显示 UID 或记录的进程的 Android ID。usec
:显示精确到微秒的时间。UTC
:显示 UTC 时间。year
:将年份添加到显示的时间。zone
:将本地时区添加到显示的时间。
3、查看备用日志缓冲区
Android 日志记录系统为日志消息保留了多个环形缓冲区,而且并非所有的日志消息都会发送到默认的环形缓冲区。要查看其他日志消息,您可以使用 -b
选项运行 logcat
命令,以请求查看备用的环形缓冲区。您可以查看下列任意备用缓冲区:
radio
:查看包含无线装置/电话相关消息的缓冲区。events
:查看已经过解译的二进制系统事件缓冲区消息。main
:查看主日志缓冲区(默认),不包含系统和崩溃日志消息。system
:查看系统日志缓冲区(默认)。crash
:查看崩溃日志缓冲区(默认)。all
:查看所有缓冲区。default
:报告main
、system
和crash
缓冲区。
例如:
adb logcat -b crash // 查看crash 缓冲区
后记
把logcat仔细研究一番,发现还是有挺多实用的技巧,比如,有时候会遇到logcat报如下问题:
logcat read unexpected eof
实际上是缓冲区不足导致的,如过有看过上面的参数,马上就知道对应的解决方案了——修改缓冲区大小就能解决
对应参数是-G
所以,我们还是很有必要好好研究平常常用到的命名,温故知新。
——Weiwq 后记于 2020.04 广州