Android的logcat日志工具使用详解

简介:

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虚拟机中的日志消息:

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4天前
|
Linux 应用服务中间件 PHP
性能工具之linux常见日志统计分析命令
通过本文的介绍,我相信同学们一定会发现 linux三剑客强大之处。在命令行中,它还能够接受,和执行外部的 AWK 程序文件,可以对文本信息进行非常复杂的处理,可以说“只有想不到的,没有它做不到的。
60 1
|
4天前
|
安全 Java Linux
Android反编译——jadx工具
Android反编译——jadx工具
47 1
|
4天前
|
编译器 vr&ar C语言
高效c/c++日志工具zlog使用介绍
高效c/c++日志工具zlog使用介绍
134 2
|
4天前
|
Android开发 芯片 开发者
Android MediaTek bootloader 的序列号长度 & 移除非字母和数字限制 SN-Writer工具支持写入
Android MediaTek bootloader 的序列号长度 & 移除非字母和数字限制 SN-Writer工具支持写入
21 0
|
4天前
|
存储 Prometheus 监控
Prometheus vs. ELK Stack:容器监控与日志管理工具的较量
随着容器化技术的广泛应用,容器监控与日志管理成为了关键任务。本文将对两种常用工具进行比较与选择,分别是Prometheus和ELK Stack。Prometheus是一款开源的监控系统,专注于时序数据的收集和告警。而ELK Stack则是一套完整的日志管理解决方案,由Elasticsearch、Logstash和Kibana三个组件组成。通过比较它们的特点、优势和适用场景,读者可以更好地了解如何选择适合自己需求的工具。
|
3天前
|
监控 安全 API
orhanobut/logger - 强大的Android日志打印库
orhanobut/logger - 强大的Android日志打印库
8 1
|
4天前
|
Java Android开发
Android 反编译工具的使用
Android 反编译工具的使用
23 0
|
4天前
|
Android开发
Android 截屏 录屏 与获取log
Android 截屏 录屏 与获取log
14 1
|
4天前
|
数据可视化
R语言两阶段最小⼆乘法2SLS回归、工具变量法分析股息收益、股权溢价和surfaces曲面图可视化
R语言两阶段最小⼆乘法2SLS回归、工具变量法分析股息收益、股权溢价和surfaces曲面图可视化
|
4天前
|
监控 Linux 开发者
【专栏】`head`命令是Linux系统中用于快速查看文件开头内容的工具,常用于处理日志文件
【4月更文挑战第28天】`head`命令是Linux系统中用于快速查看文件开头内容的工具,常用于处理日志文件。基本用法包括指定查看行数(如`head -n 10 file.txt`)和与其他命令(如`grep`)结合使用。高级用法涉及动态查看日志、过滤内容、管道操作及在脚本中的应用。实际应用案例包括监控系统日志、排查错误和分析应用日志。使用时注意文件存在性、行数选择及权限问题。熟练掌握head命令能提升工作效率,结合其他工具可实现更多功能,助力Linux用户提升技能。