adb软件自动化测试底层学习(4)---Log
Android日志记录系统是系统进程logd维护的一组结构化环形缓冲区。这组缓存是固定的,由系统定义(main,system,crash)
- main : 存储大多数应用日志
- system : 用于存储源自Android操作系统消息
- crash : 用于存储崩溃日志
每个日志条目都包含一个优先级(VERBOSE、DEBUG、INFO、WARNING、ERROR 或 FATAL)、一个标识日志来源的标记以及实际的日志消息。
命令语法
[adb] logcat [<option>] [<filter-spec>]
同时也可以在shell环境下运行
$ adb shell
# logcat [<option>] [<filter-spec>]
常用选项(option)
| 选项 | 说明 |
|---|---|
| -b <buffer> | 加载可供查看的备用日志缓冲区,例如 events 或 radio。默认使用 main、system 和 crash 缓冲区集 |
| -c | 清除(清空)所选的缓冲区并退出。默认缓冲区集为 main、system 和 crash。如需清除所有缓冲区,请使用 -b all -c。 |
| -e <expr> | 只输出日志消息与 <expr> 匹配的行,其中 |
| -m<count> | 输出 <count> 行后退出。这样是为了与 --regex 配对,但可以独立运行。 |
| -d | 将日志转储到屏幕并退出。 |
| -v <format> | 置日志消息的输出格式。默认格式为 threadtime。 查看日志输出格式 |
| --pid | 仅输出来自给定 PID 的日志。 |
查看备用日志缓冲区
Android 日志记录系统为日志消息保留了多个环形缓冲区,而且并非所有的日志消息都会发送到默认的环形缓冲区。如要查看其他日志消息,您可以使用 -b 选项运行 logcat 命令,以请求查看备用的环形缓冲区。您可以查看下列任意备用缓冲区:
- radio:查看包含无线装置/电话相关消息的缓冲区。
- events:查看已经过解译的二进制系统事件缓冲区消息。
- main:查看主日志缓冲区(默认),不包含系统和崩溃日志消息。
- system:查看系统日志缓冲区(默认)。
- crash:查看崩溃日志缓冲区(默认)。
- all:查看所有缓冲区。
- default:报告 main、system 和 crash 缓冲区
adb logcat -b radio //指定radio
adb logcat -b main,radio,system //指定main,radio,system
adb logcat -b main -b radio -b system //指定main,radio,system
查看日志输出格式
除标记和优先级外,日志消息还包含许多元数据字段。您可以修改消息的输出格式,以便它们显示特定的元数据字段。为此,您可以使用 -v 选项,并指定下列某一受支持的输出格式。
- brief:显示优先级、标记以及发出消息的进程的 PID。
- long:显示所有元数据字段,并使用空白行分隔消息。
- process:仅显示 PID。
- raw:显示不包含其他元数据字段的原始日志消息。
- tag:仅显示优先级和标记。
- thread::旧版格式,显示优先级、PID 以及发出消息的线程的 TID。
- threadtime(默认值):显示日期、调用时间、优先级、标记、PID 以及发出消息的线程的 TID。
- time:显示日期、调用时间、优先级、标记以及发出消息的进程的 PID。
adb logcat -v brief//显示优先级标记&pid
过滤日志输出
- 日志消息的标记(tag)是一个简短的字符串,指示消息所源自的系统组件(例如,“View”表示视图系统)。
- 优先级(priority)是以下字符值之一(按照从最低到最高优先级的顺序排列):
- V:详细(最低优先级)
- D:调试
- I:信息
- W:警告
- E:错误
- F:严重错误
- S:静默(最高优先级,绝不会输出任何内容)
通过运行 Logcat 并观察每条消息的前两列,可以获取系统中使用的带有优先级的标记列表,格式为<priority>/<tag>。
$ adb logcat -v brief --pid 707
$ I/tify.tv.androi( 707): Background concurrent copying GC freed 6351(355KB) AllocSpace objects, 14(280KB) LOS objects, 24% free, 2766KB/3688KB, paused 608us total 189.894ms
如要将日志输出降低到可管理的水平,您可以使用过滤器表达式限制日志输出。通过过滤器表达式,您可以向系统指明您感兴趣的标记/优先级组合,系统会针对指定的标记抑制其他消息。
过滤器表达式采用 tag:priority ... 格式,其中 tag 指示您感兴趣的标记,priority 指示可针对该标记报告的最低优先级。不低于指定优先级的标记的消息会写入日志。您可以在一个过滤器表达式中提供任意数量的 tag:priority 规范。一系列规范使用空格分隔。
以下是一个过滤器表达式的示例,该表达式会抑制除标记为“ActivityManager”、优先级不低于“信息”的日志消息,以及标记为“MyApp”、优先级不低于“调试”的日志消息以外的所有其他日志消息:
adb logcat -v brief ActivityManager:I MyApp:D *:S
上述表达式中最后一个元素 *:S 将所有标记的优先级设为“静默”,从而确保系统仅显示标记为“ActivityManager”和“MyApp”的日志消息。使用 *:S 是确保日志输出受限于您已明确指定的过滤器的绝佳方式,它可以让过滤器充当日志输出的“许可名单”。

浙公网安备 33010602011771号