logcat命令行工具

原文:https://developer.android.com/studio/command-line/logcat?hl=zh-cn


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

基本语法
adb logcat : 通过adb命令去捕获logcat日志
adb shell : 通过adb命令进入到模拟器的linux系统中
Logcat命令行选项

下面介绍的是logcat命令行选项

格式:[adb] logcat [<option>] ... [<filter-spec>] ...

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

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

过滤日志输出

日志级别分为以下等级(从低到高排列):V - 详细 D - 调试 I - 信息 W - 警告 E - 错误 F - 致命 S - 静默(最高优先级,不会打印任何信息)

//JAVA代码
Log.i("Hello","InitViews -> ( ̄▽ ̄)");
Log.d("Hi","InitView -> (#^.^#)");
//AS的Logcat控制台打印
08-21 09:41:56.954 11314-11314/? I/Hello: InitViews -> ( ̄▽ ̄)
08-21 09:52:41.020 12179-12179/com.monsterlin.androidpractice D/Hi: InitView -> (#^.^#)

==>通过对应,我们发现其日志的表现形式为:<priority>/<tag>
//对应的Log命令

// 该命令的作用为阻止带有标记Hello,优先级等于或高于I的日志消息,以及带有标记Hi,优先级等于或高级D的日志消息以外的所有的日志消息
logcat Hello:I Hi:D *:S

//最后一个元素 *:S 将所有标记的优先级设为“静默”,从而确保系统仅显示带有“ActivityManager”和“MyApp”标记的日志消息
//结果输出

130|dipper:/ $ logcat Hello:I Hi:D *:S
--------- beginning of system
--------- beginning of main
08-21 09:52:41.020 12179 12179 I Hello   : InitViews -> ( ̄▽ ̄)
08-21 09:52:41.020 12179 12179 D Hi      : InitView -> (#^.^#)
控制日志输出格式

使用-v选项,并指定下面列出的支持的输出格式之一

brief — 显示优先级/标记以及发出消息的进程的 PID(默认格式)。
process — 仅显示 PID。
tag — 仅显示优先级/标记。
raw — 显示原始日志消息,不显示其他元数据字段。
time — 显示日期、调用时间、优先级/标记以及发出消息的进程的 PID。
threadtime — 显示日期、调用时间、优先级、标记以及发出消息的线程的 PID 和 TID。
long — 显示所有元数据字段,并使用空白行分隔消息。

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

[adb] logcat [-v <format>]
==> logcat -v thread

I( 2441: 2453) uid=10189(com.tencent.mobileqq) HeapTaskDaemon expire 2 lines
I( 2493: 2493) uid=10189 com.tencent.mobileqq:MSF expire 18 lines
I( 6344: 6418) uid=10189 com.tencent.mobileqq:peak expire 4 lines
I( 6344: 6424) uid=10189 com.tencent.mobileqq:peak expire 37 lines
I( 6344: 6422) uid=10189 com.tencent.mobileqq:peak expire 2 lines
查看备用日志的缓冲区

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

radio — 查看包含无线装置/电话相关消息的缓冲区。
events — 查看包含事件相关消息的缓冲区。
main — 查看主要日志缓冲区(默认值)
[adb] logcat [-b <buffer>]
==> adb logcat -b radio

08-21 10:13:56.697  2134  2134 D RILJ    : [5139]> OPERATOR [SUB1]
08-21 10:13:56.698  2134  2134 D RILJ    : [5140]> DATA_REGISTRATION_STATE [SUB1]
08-21 10:13:56.698  2134  2134 D RILJ    : [5141]> VOICE_REGISTRATION_STATE [SUB1]
08-21 10:13:56.699  2134  2134 D RILJ    : [5142]> QUERY_NETWORK_SELECTION_MODE [SUB1]
08-21 10:13:56.705  2134  2254 D RILJ    : [5139]< OPERATOR {小米移动, 小米移动, 46001} [SUB1]
查看stdout和stdeer

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

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

$ adb shell stop
$ adb shell setprop log.redirect-stdio true
$ adb shell start
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值