Android Studio 中的 Logcat 窗口可帮助您通过实时显示设备中的日志来调试应用,例如使用 Log 类添加到应用中的消息、Android 上运行的服务发出的消息或系统消息(例如发生垃圾回收时)。当应用抛出异常时,Logcat 会显示一条消息,后跟相关的堆栈轨迹,其中包含指向代码行的链接。
Logcat 窗口使用入门
如需查看应用的日志消息,请按以下步骤操作:
- 在 Android Studio 中,在物理设备或模拟器上构建并运行应用。
- 从菜单栏中依次选择 View > Tool Windows > Logcat。
默认情况下,Logcat 会滚动到底部。在 Logcat 视图中点击或使用鼠标滚轮向上滚动会关闭此功能。要重新开启此功能,请点击工具栏中的滚动到底部
。您还可以使用工具栏清除、暂停或重新启动 Logcat。

图 1. Logcat 会对日志进行格式化,以便您更轻松地扫描有用信息(例如标签和消息)以及识别不同类型的日志(例如警告和错误)。
如何读取日志
每个日志都包含日期、时间戳、进程和线程 ID、标签、软件包名称、优先级以及关联的消息。不同的标签具有独特的颜色,有助于识别日志类型。每个日志条目的优先级均为 FATAL、ERROR、WARNING、INFO、DEBUG 或 VERBOSE。
例如,以下日志消息的优先级为 DEBUG,标签为 ProfileInstaller
2022-12-29 04:00:18.823 30249-30321 ProfileInstaller com.google.samples.apps.sunflower D Installing profile for com.google.samples.apps.sunflower
配置日志视图
标准日志视图会显示每个日志的日期、时间、进程和线程 ID、标签、软件包名称、优先级以及关联的消息。默认情况下,日志视图中不会自动换行消息行,但您可以使用 Logcat 工具栏中的自动换行
选项。
您可以通过点击 Logcat 工具栏中的配置 Logcat 格式选项
来切换到默认显示信息较少的精简视图。
如需进一步配置要显示的信息量,请选择 Modify Views(修改视图),然后选择是要显示时间戳、标签、进程 ID 还是软件包名称。
更改配色方案
如需更改配色方案,请依次导航到 Android Studio > Settings(设置)> Editor(编辑器)> Color Scheme(配色方案)。如需更改日志视图的配色方案,请选择 Android Logcat。如需更改过滤器的配色方案,请选择 Logcat Filter。
其他配置选项
如需了解其他配置选项,请依次导航到 Android Studio > Settings(设置)> Tools(工具)> Logcat。在这里,您可以选择 Logcat 循环缓冲区大小、新 Logcat 窗口的默认过滤器,以及是否要将历史记录中的过滤器添加到自动补全功能中。
在多个窗口中使用 Logcat
标签页可帮助您轻松切换不同设备或查询。您可以通过点击新建标签页
创建多个 Logcat 标签页。右键点击标签页可对其进行重命名和重新排列。
此外,您可以在标签页内拆分视图,以便更轻松地比较两组日志。要创建拆分,请在日志视图中右键点击或点击工具栏中的 Split Panels(拆分面板)选项,然后选择 Split Right(右侧拆分)或 Split Down(向下拆分)。要关闭拆分,请右键点击并选择 Close(关闭)。每个拆分都允许您设置自己的设备连接、视图选项和查询。
图 2. Android Studio 中的分屏 Logcat 窗口。
在 Logcat 工具栏中,您可以滚动到日志末尾,也可以点击特定行以保持该行可见。
使用键值搜索查询日志
在 Android Studio 中,您可以直接从主查询字段生成键值搜索。此查询系统可精确查询您想要的内容,并根据键值排除日志。虽然您可以选择使用正则表达式,但查询时无需依赖它们。要查看建议,请在查询字段中按 Ctrl + Space。
图 3. 在查询字段中按 Ctrl + Space 可查看建议查询的列表。
您可以在查询中使用的一些键示例如下:
tag:与日志条目的tag字段匹配。package:与日志记录应用的软件包名称匹配。process:与日志记录应用的进程名称匹配。message:与日志条目的消息部分匹配。level:匹配指定日志级别或更高级别的严重日志级别,例如DEBUG。age:如果条目时间戳是最近的,则匹配。值指定为数字,后跟表示时间单位的字母:s表示秒,m表示分钟,h表示小时,d表示天。例如,age: 5m仅过滤在过去 5 分钟内记录的消息。
否定和正则表达式
以下字段支持否定和正则表达式匹配:tag、package、message 和 line。
通过在字段名称前加上 - 来表示否定。例如,-tag:MyTag 匹配 tag 不包含字符串 MyTag 的日志条目。
通过在字段名称后加上 ~ 来表示正则表达式匹配。例如,tag~:My.*Tag。
否定和正则表达式修饰符可以组合使用。例如,-tag~:My.*Tag。
逻辑运算符和括号
查询语言支持由 & 和 | 表示的 AND 和 OR 运算符以及括号。例如:
(tag:foo | level:ERROR) & package:mine
请注意,系统会强制执行正常的运算符优先级,因此以下内容:
tag:foo | level:ERROR & package:mine
会被评估为:
tag:foo | (level:ERROR & package:mine)
隐式逻辑运算符
如果不应用逻辑运算符,查询语言会自动将具有相同键的多个非否定 key-value 过滤条件评估为 OR,将所有其他条件评估为 AND。
例如:
tag:foo tag:bar package:myapp
会被评估为:
(tag:foo | tag:bar) & package:myapp
但:
tag:foo -tag:bar package:myapp
会被评估为:
tag:foo & -tag:bar & package:myapp
如果多个查询词以空格分隔且没有逻辑运算符,则它们被视为优先级较低的 AND。例如,foo bar tag:bar1 | tag:bar2 相当于 'foo bar' & (tag: bar1 | tag: bar2)。
特殊查询
package:mine
package 键支持特殊值 mine。此特殊值与开放项目中所包含的任何软件包名称匹配。
level
level 查询与 Logcat 消息的日志级别匹配,其中日志条目级别大于或等于查询级别。
例如,level:INFO 匹配日志级别为 INFO、WARN、ERROR 或 ASSERT 的任何日志条目。此级别不区分大小写。有效级别包括:VERBOSE、DEBUG、INFO、WARN、ERROR 和 ASSERT。
age
age 查询根据条目的时间戳进行匹配,其格式为 age:<number><unit>,其中:
<number>是一个整数<unit>是s、m、h和d(秒、分钟、小时和天)之一。
给定以下列表,age 查询匹配时间戳在值所描述范围内的日志消息。例如,查询 age:5m 匹配时间戳不早于 5 分钟前的条目。
age:30s
age:5m
age:3h
age:1d
请注意,时间戳是与主机的时戳进行比较,而不是与连接设备的时戳进行比较。如果设备时间未正确设置,此查询可能无法按预期工作。
is 键
您可以按如下方式使用 is 键:
is:crash匹配表示应用崩溃的日志条目(原生或 Java)。is:stacktrace匹配表示任何类似于 Java 堆栈轨迹的日志条目,无论日志级别如何。
name 键
name 键可让您为已保存的过滤器提供唯一的名称,以便在过滤器历史记录下拉列表中轻松识别。即使您多次指定 name 也不会出错,但 IDE 在查询中仅使用为 name 指定的最后一个值。
查看查询历史记录
您可以通过点击查询字段旁边的显示历史记录
来查看查询历史记录。要将查询收藏,使其在所有 Studio 项目的列表顶部显示,请点击旁边的星标。您还可以使用 name: 键让收藏的查询更易于识别。如需了解详情,请参阅特殊查询。

图 4. 点击查询旁边的星标即可将其收藏。
跟踪应用崩溃和重启的日志
当 Logcat 检测到您的应用进程已停止并重新启动时,它会在输出中显示一条消息,例如 PROCESS ENDED 和 PROCESS STARTED。重新启动 Logcat 会保留您的会话配置,例如标签页拆分、过滤器和视图选项,以便您轻松继续会话。

图 5. 当应用进程重新启动时,Logcat 会打印一条消息,指示进程已结束然后重新开始。