百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Android的logcat日志工具使用详解

lipiwang 2025-06-28 15:09 3 浏览 0 评论

logcat是Android中一个命令行工具,可以用于得到程序的log信息。Android日志系统提供了记录和查看系统调试信息的功能。日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过 logcat 命令来查看和使用。

一、环境描述

宿主机OS:CentOS 6.6 x86_64

宿主机IP:192.168.1.119

虚拟机OS:Android-x86 4.4-r2

虚拟机IP:192.168.1.126

网络方式:Bridge

Android SDK版本:android-sdk_r24.2-linux

KVM版本:QEMU PC emulator version 0.12.1 (
qemu-kvm-0.12.1.2-2.448.el6_6.3)

二、logcat命令的基本用法

1. logcat命令使用格式

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

2. 两种使用方式

在宿主机上使用:

$ adb logcat

在虚拟机或手机上使用:

# logcat

三、过滤日志输出

每一条输出的Android日志信息都有一个标签和优先级。

1. 日志标签

日志的标签是系统部件原始信息的一个简要的标志。(比如:“View”就 是查看系统的标签)。

2. 日志优先级

日志优先级有下列几种,按照从低到高顺序排列:

  • V — Verbose(最详细的日志,最低优先级)

  • D — Debug(调试)

  • I — Info(信息)

  • W — Warning(警告)

  • E — Error(错误)

  • F — Fatal(致命错误)

  • S — Silent(静默,最高优先级,不会输出任何信息)

3. 日志过滤器

在运行logcat的时候在前两列的信息中你就可以看到 logcat 的标签列表和优先级别,它是这样标出的:<priority>/<tag>

下面是一个logcat输出的例子,它的优先级是I,标签是ActivityManage

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

为了让日志输出能够体现管理的级别,你还可以用过滤器来控制日志输出,过滤器可以帮助你描述系统的标签等级。

过滤器语句按照下面的格式描述:

tag:priority ...

其中,tag表示标签,priority表示相应标签日志的最低优先级。

从上面的tag的中可以得到日志的标签和优先级。你可以在过滤器中多次描述tag:priority

4. 使用实例

请查看以下使用实例:

adb logcat ActivityManager:I MyApp:D *:S

上述实例表示支持所有的日志信息,除了标签为“ActivityManager”和优先级为“Info”以上的日志,以及标签为“MyApp”和优先级为“Debug”以上的日志。上述实例中的最后的元素*:S,意味着将所有其他标签的优先级设置为“Silent”,所有日志只显示有“ActivityManager”“MyApp”标签的。*:S的另一个用处是能够确保日志输出的时候是按照过滤器的说明限制的,也让过滤器作为一项输出到日志中。

下面的过滤语句只显示优先级为“Warning”或更高优先级的日志信息:

adb logcat *:W

如果你在宿主机上运行logcat,相比起在远程adb shell端,你还可以为环境变量ANDROID_LOG_TAGS指定一个参数来设置默认的过滤器:

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

注意,如果通过远程shell运行logcat命令,或者运行adb shell logcat命令,那么将不能使用ANDROID_LOG_TAGS中设置的过滤器。

四、指定日志输出格式

日志信息包括很多元数据域,例如标签和优先级。可以修改日志的输出格式,指定显示特定的元数据域。可以通过-v 选项得到格式化输出日志的相关信息:

  • brief — 显示源进程的优先级/标签和PID(默认格式)。

  • process — 只显示PID。

  • tag — 只显示优先级/标签。

  • thread — 只显示进程 : 线程和优先级/标签。

  • raw — 显示原始的日志消息,没有其他的元数据域。

  • time — 显示源进程的日期、调用时间、优先级/标签和PID。

  • long — 显示所有的元数据域和单独的消息,带有一个空行。

启动logcat时,你可以通过-v选项来指定日志输出格式:

[adb] logcat [-v <format>]

以下实例使用thread来指定日志输出格式:

adb logcat -v thread

注意,你只能使用-v选项来指定日志输出格式的选项。

五、查看可用的日志缓冲区

我们在使用logcat抓取日志的时候,可以指定buffer,来请求不同的环形缓冲区 ('main', 'system', 'radio', 'events',默认为”-b main -b system“),因为Android日志系统为日志消息保持了多个循环缓冲区,而且不是所有的消息都被发送到默认缓冲区,要想查看这些附加的缓冲区,可以使用-b选项,以下是可以指定的缓冲区:

  • radio — 查看包含在无线/电话相关的缓冲区消息。

  • events — 查看事件相关的日志消息。

  • main — 查看主缓冲区(默认缓冲区)。

  • system — 查看系统相关的日志消息。

-b选项的使用方法如下所示:

[adb] logcat [-b <buffer>]

以下实例表示如何查看包含无线和电话的日志消息:

adb logcat -b radio

六、查看标准输出和标准错误

在默认状态下,Android系统会将标准输出和标准错误(System.outSystem.err)输出到/dev/null,在运行Dalvik VM的进程中,有一个系统可以备份日志文件。在这种情况下,系统会用标准输出和标准错误,以及优先级 I 来记录日志消息。

通过以下方法可以指定日志输出的路径,停止运行的模拟器/设备,然后使用setprop命令远程输入日志:

$ adb shell stop

$ adb shell setprop log.redirect-stdio true

$ adb shell start

七、logcat命令选项

选项描述
-b <buffer>请求可选择的环形缓冲区,main、system、radio或events。可以使用多个-b参数,输出的结果是交错的。默认值为-b main -b system。
-c清除全部日志,然后退出。
-d转储日志,然后退出(不会阻塞)。
-f <filename>将日志输出至文件。默认为标准输出(stdout)。
-g获取日志环形缓冲区的大小,然后退出。
-n <count>通过指定轮转日志的最大数量,默认为4。
-r <kbytes>每千字节就轮转一次日志。若没有指定,则默认值为16。需要使用-f选项。
-s“将默认的过滤器设置为静默。就像是指定过滤器描述符“*:S”。
-v <format>“设置日志的输出格式,其中<format>是下面其中之一:brief、process、tag、thread、raw、time、threadtime、long”
-t <count>只输出最近几行的日志,行数由<count>指定(隐含-d选项)。
-B以二进制方式输出日志。

八、在kvm环境中使用logcat

1. 启动Android-x86虚拟机

在virt-manager的图形界面中启动Android-x86虚拟机,如下图所示:

在shell中运行ps aux | grep kvm命令,可以看到这个虚拟机的进程详情,如下图所示:

2. 从宿主机连接至虚拟机

在shell中运行以下命令:

adb connect 192.168.1.126

若命令返回如下图所示,则表示连接成功:

3. 运行logcat命令

在shell中运行以下命令:

adb logcat

若命令返回和下图中类似,则表明已经看到Android虚拟机中的日志消息:

相关推荐

如何在 Linux 中压缩文件和目录?(linux压缩文件夹到指定目录)

在Linux系统中,文件和目录的压缩是一项常见且重要的操作。无论是为了节省存储空间、便于文件传输,还是进行备份管理,掌握压缩技术都能极大地提升工作效率。Linux中常用的压缩工具1.tar:打...

什么是LIM模具?与普通硅胶模具有何本质区别?

要深入理解LIM模具及其与普通硅胶模具的本质区别,需从成型逻辑、技术架构、应用价值三个层面拆解,以下是系统性解析:一、LIM模具:定义与核心技术1.定义LIM模具(LiquidInj...

前后端安全机制(前后端分离安全的token)

一、密钥安全管理方案1.动态密钥分发机制密钥与会话绑定后端为每个用户会话生成临时密钥(如AES-256密钥),通过HTTPS加密传输给前端,会话结束后自动失效。例如:javascript//...

Switch 2芯片细节曝光,英伟达专门定制支持DLSS,网友:掌机模式相当于PS4

Switch2处理器,细节被实锤!数毛社(DigitalFoundry)消息,已经确定Switch2采用的是英伟达真·定制版芯片,包含8核CPU和12GBLPDDR5X内存。GPU则基于Amp...

独立站的PageSpeed Insights 指标在seo中的作用?

这是一个非常关键的问题,关于独立站(如Shopify、WordPress、自建FastAPI/Vue等网站)的PageSpeedInsights指标(Google的网页性能评分工具)在...

前端工程化-webpack 分包的方式有哪些?

Webpack的分包(CodeSplitting)是优化应用性能的重要手段,主要通过合理拆分代码减少首次加载体积、提升缓存利用率。以下是常见的分包方式及生产/开发环境配置建议:一、Webpack...

液态硅胶(LSR)套啤注塑件的关键技术难点与解决方案?

液态硅胶(LSR)套啤注塑件(即二次注塑成型,一次成型基材+二次LSR包胶)在医疗、电子、汽车等领域应用广泛,但其关键技术难点需从材料、模具、工艺等多维度突破。以下是核心难点及解决方案:一、关...

spa首屏加载慢怎样解决(spa首屏优化)

SPA(SinglePageApplication,单页应用)首屏加载慢是一个常见问题,主要原因通常是首次加载需要拉取体积较大的JavaScript文件、样式表、初始化数据等。以下是一些常见的...

揭秘|为什么新华三(H3C)要自主研发运维管理软件?

1概述1.1产生背景随着互联网技术的快速发展,企业对计算、网络的需求也越来越大。为了保证整个数据系统可靠、稳定地运行,相关企业对运维系统的要求越来越高,运维成本也在随之逐步增加。H3C公司自主研发的运...

动态主机配置协议——DHCP详解(dhcp动态主机配置协议的功能是?)

一、DHCP简介DHCP(DynamicHostConfigurationProtocol),动态主机配置协议,是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会...

OGG同步到Kafka(oggforbigdata到kafka)

目的:测试使用OGG将数据单向同步到Kafka上。简要说明:Kafka使用单节点单Broker部署;单独部署简单ZooKeeper;需要使用到JAVA1.8;OGG需要2个版本,一个fororacl...

Zabbix入门操作指南(zabbix4.0使用手册)

上篇:安装与配置一.概述在开始之前,一些概念和定义需要我们提前了解一下(以下内容摘自官方网站)。1.1几个概念架构Zabbix由几个主要的功能组件组成,其职责如下所示。ServerZabbixs...

绝对干货!升级MySQL5.7到MySQL8.0的最佳实践分享

一、前言事出必有因,在这个月的某个项目中,我们面临了一项重要任务,即每年一次的等保测评整改。这次测评的重点是Mysql的一些高危漏洞,客户要求我们无论如何必须解决这些漏洞。尽管我们感到无奈,但为了满足...

pytorch v2.7.0震撼发布!Blackwell GPU支持+编译性能狂飙,AI开发

重点内容测试版(Beta):oTorch.Compile支持Torch函数模式oMega缓存原型(Prototype):o支持NVIDIABlackwell架构oPyTorch...

kubernetes1.31.3集群搭建(上)(kubectl连接集群)

1集群规划1.1物理机环境电脑操作系统CPU内存硬盘网卡IP地址(静态)虚拟机软件服务器操作系统联想Windows11Intel12900K24核128GB4TBPcIE4.0无线网卡192...

取消回复欢迎 发表评论: