ADB 操作命令详解及用法大全(三)

2024-04-18 16:08:31 浏览数 (2)

日志打印

Android 系统的日志分为两部分,底层的 Linux 内核日志输出到 /proc/kmsg,Android 的日志输出到 /dev/log。

获取Android 日志

查看 Android 设备系统属性的基本命令格式是:

代码语言:javascript复制
adb logcat [option] [filter-specs]
  • 1

如果需要停止 logcat 日志打印,可以按 Ctrl C 停止日志监控。

按级别过滤日志

按级别过滤日志的基本命令格式是:

代码语言:javascript复制
adb logcat [filter-specs]
  • 1

Android 的日志分为如下几个优先级(priority):

级别 含义

*:V 过滤只显示 Verbose 及以上级别(优先级最低)

*:D 过滤只显示 Debug 及以上级别

*:I 过滤只显示 Info 及以上级别

*:W 过滤只显示 Warning 及以上级别

*:E 过滤只显示 Error 及以上级别

*:F 过滤只显示 Fatal 及以上级别

*:S 过滤只显示 Silent 及以上级别(优先级最高,什么也不输出)

按某级别过滤日志则会将该级别及以上的日志输出。

比如,命令:

代码语言:javascript复制
adb logcat *:W

会将 Warning、Error、Fatal 和 Silent 日志输出。

(注:在 macOS 下需要给 *:W 这样以 * 作为 tag 的参数加双引号,如 adb logcat "*:W",不然会报错 no matches found: *:W。)

按 tag 和级别过滤日志

按 tag 和级别过滤日志的基本命令格式是:

代码语言:javascript复制
adb logcat [tag:level] [tag:level] ...

比如,命令:

代码语言:javascript复制
adb logcat ActivityManager:I App:D *:S

表示输出 tag ActivityManager 的 Info 以上级别日志,输出 tag App 的 Debug 以上级别日志,及其它 tag 的 Silent 级别日志(即屏蔽其它 tag 日志)。

将日志格式化输出

可以用 adb logcat -v <format> 选项指定日志输出格式。 日志支持按以下几种 <format>

参数 显示格式

brief 显示格式:<priority>/<tag>(<pid>): <message>

process 显示格式:<priority>(<pid>) <message>

tag 显示格式:<priority>/<tag>: <message>

raw 显示格式:<message>

time 显示格式: <datetime> <priority>/<tag>(<pid>): <message>

threadtime 显示格式: <datetime> <pid> <tid> <priority> <tag>: <message>

long 显示格式: [ <datetime> <pid>:<tid> <priority>/<tag> ] <message>

日志格式默认为 brief,指定格式可与上面的过滤同时使用。比如:

代码语言:javascript复制
adb logcat -v long ActivityManager:I *:S

清空已存在的日志

代码语言:javascript复制
adb logcat -c

将日志显示在控制台

代码语言:javascript复制
adb logcat -d

将日志输出到文件

代码语言:javascript复制
adb logcat > log.txt

加载一个可使用的日志缓冲区供查看

代码语言:javascript复制
adb logcat -b <Buffer>

Android log 输出量巨大,特别是通信系统的log,因此,Android把log输出到不同的缓冲区中,目前定义了四个log缓冲区:

Radio 输出通信系统的 log

System 输出系统组件的 log

Event 输出 event 模块的 log

Main 所有 java 层的 log 以及不属于上面3层的 log

缓冲区主要给系统组件使用,一般的应用不需要关心,应用的log都输出到main缓冲区中。默认log输出(不指定缓冲区的情况下)是输出System和Main缓冲区的log。

打印指定日志缓冲区的大小
代码语言:javascript复制
adb logcat -g
内核日志
代码语言:javascript复制
adb shell dmesg

在测试中,很多时候,对于log的需求还是比较多的,因此熟练掌握日志的使用,十分有必要。

0 人点赞