Skip to content

Most visited

Recently visited

navigation

logcat 命令行工具

Logcat 是一个命令行工具,用于转储系统消息日志,其中包括设备引发错误时的堆叠追踪以及从您的应用使用 Log 类编写的消息。

本页介绍命令行 logcat 工具,但在 Android Studio 中,您也可以从 Logcat 窗口查看日志消息。有关从 Android Studio 查看和过滤日志的信息,请参阅使用 Logcat 编写和查看日志

命令行语法

[adb] logcat [<option>] ... [<filter-spec>] ...

您可以 adb 命令的形式运行 logcat,或在模拟器或所连接设备的 shell 提示符中直接运行。若要使用 adb 查看日志输出,请导航到 SDK platform-tools/ 目录并执行:

$ adb logcat

您可以创建与设备相连的 shell 连接并执行:

$ adb shell
# logcat

选项

下表介绍的是 logcat 的命令行选项。

选项 说明
-b <buffer> 加载可供查看的备用日志缓冲区,如 eventsradio。默认情况下使用 main 缓冲区。请参阅查看备用日志缓冲区
-c 清除(刷新)整个日志并退出。
-d 将日志转储到屏幕并退出。
-f <filename> 将日志消息输出写入 <filename>。默认值为 stdout
-g 打印指定日志缓冲区的大小并退出。
-n <count> 将已旋转日志的最大数量设置为 <count>。默认值为 4。 需要使用 -r 选项。
-r <kbytes> 每输出 <kbytes> 时旋转日志文件。默认值为 16。需要使用 -f 选项。
-s 将默认过滤器规则设为静默式。
-v <format> 设置日志消息的输出格式。默认值为 brief 格式有关支持的格式列表,请参阅控制日志输出格式

启动 logcat

以下是通过 ADB shell 运行 logcat 的一般用法:

[adb] logcat [<option>] ... [<filter-spec>] ...

您可以从开发计算机或通过模拟器/设备实例中的远程 adb shell 使用 logcat 命令。在开发计算机中查看日志输出可使用

$ adb logcat

从远程 adb shell 查看日志输出可使用

# logcat

下表介绍的是 logcat 命令行选项:

-c 清除(刷新)整个日志并退出。
-d 将日志转储到屏幕并退出。
-f <filename> 将日志消息输出写入 <filename>。默认值为 stdout
-g 打印指定日志缓冲区的大小并退出。
-n <count> 将已旋转日志的最大数量设置为 <count>。默认值为 4。 需要使用 -r 选项。
-r <kbytes> 每输出 <kbytes> 时旋转日志文件。默认值为 16。需要使用 -f 选项。
-s 将默认过滤器规则设为静默式。
-v <format> 设置日志消息的输出格式。默认值为 brief 格式有关支持的格式列表,请参阅控制日志输出格式

过滤日志输出

每个 Android 日志消息都有与其关联的标记优先级

通过运行 logcat 并观察每条消息的前两列,您可以获取系统中使用的标记列表及优先级,格式为 <priority>/<tag>

下面是 logcat 输出的一个示例,其表明消息与优先级“I”和标记“ActivityManager”相关:

I/ActivityManager(  585): Starting activity: Intent { action=android.intent.action...}

若要将日志输出降低到可管理的水平,您可以使用过滤器表达式限制日志输出。过滤器表达式允许您向系统表明您感兴趣的标记-优先级组合—系统针对指定的标记阻止其他消息。

过滤器表达式遵循 tag:priority ... 这个格式,其中 tag 表示感兴趣的标记,priority 表示将该标记报告的最低优先级。将优先级等于或高于指定优先级的标记的消息写入日志。您可以在一个过滤器表达式中提供任意数量的 tag:priority 规则。一系列规则使用空格分隔。

下面是一个过滤器表达式的示例,该表达式将阻止除了带有标记“ActivityManager”、优先级等于或高于“信息”的日志消息以及带有标记“MyApp”、优先级等于或高于“调试”的日志消息外的所有其他日志消息。

adb logcat ActivityManager:I MyApp:D *:S

上述表达式中最后一个元素 *:S 将所有标记的优先级设为“静默”,从而确保系统仅显示带有“ActivityManager”和“MyApp”标记的日志消息。使用 *:S 可有效地确保日志输出受限于您已明确指定的过滤器 — 它允许过滤器充当日志输出的“白名单”。

以下过滤器表达式显示所有标记上优先级等于或高于“警告”的所有日志消息:

adb logcat *:W

如果您从开发计算机运行 logcat(相对于在远程 adb shell 运行它),您也可以通过导出环境变量 ANDROID_LOG_TAGS 的值设置默认过滤器表达式:

export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"

请注意,如果您从远程 shell 或使用 adb shell logcat 运行 logcat,系统不会将 ANDROID_LOG_TAGS 过滤器导出到模拟器/设备实例。

控制日志输出格式

除标记和优先级外,日志消息还包含许多元数据字段。您可以修改消息的输出格式,以便它们可显示特定的元数据字段。为此,您可以使用 -v 选项,并指定下面列出的支持的输出格式之一。

启动 logcat 时,您可以使用 -v 选项指定您需要的输出格式:

[adb] logcat [-v <format>]

下面的例子展示如何生成 thread 输出格式的消息:

adb logcat -v thread

请注意,使用 -v 选项,您只能指定一个输出格式。

查看备用日志缓冲区

Android 日志系统保留日志消息的多个循环缓冲区,而不是发送到默认循环缓冲区的所有日志消息。如需查看其他日志消息,您可以使用 -b 选项运行 logcat 命令,以请求查看备用循环缓冲区。您可以查看下列备用缓冲区的任意一个:

以下是 -b 选项的用法:

[adb] logcat [-b <buffer>]

以下示例展示如何查看包含无线装置和电话消息的日志缓冲区。

adb logcat -b radio

查看 stdout 和 stderr

默认情况下,Android 系统将 stdoutstderrSystem.outSystem.err)输出发送到 /dev/null。在运行 Dalvik VM 的进程中,您可以让系统将输出的副本写入日志文件。在此情况下,系统使用日志标记 stdoutstderr(优先级都是 I)将消息写入日志。

要通过此方式路由输出,您需要停止运行的模拟器/设备实例,然后使用 shell 命令 setprop 以启用输出重定向。下面是具体做法:

$ adb shell stop
$ adb shell setprop log.redirect-stdio true
$ adb shell start

系统保留此设置,直至您终止模拟器/设备实例。若要在模拟器/设备实例上将此设置用作默认值,您可以在设备上向 /data/local.prop 添加一个条目。

通过代码记录日志

Log 类允许您在 logcat 工具中显示的代码中创建日志条目。常用的日志记录方法包括:

例如,使用以下调用:

Log.i("MyActivity", "MyClass.getView() — get item number " + position);

logcat 输出类似于如下:

I/MyActivity( 1557): MyClass.getView() — get item number 1
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)