adb进阶一 —— logcat
logcat 简介
logcat是Android中的一个命令行工具,可以用于测试过程中获取程序的log
基本用法:
测试开始前,可以先清缓存:adb logcat -c
获取日志:adb logcat > E:\app_workstation\Android_files\logs\1.log
语法格式:
1 | [adb] logcat [<option>] … [<filter – spec>] … |
推荐搭配grep使用
logcat 缓冲区
Android log输出量巨大, 特别是通信类log,好在Android降log放在不同的缓冲区内,可用于指定缓冲区输出log,目前有四个缓冲区:
缓冲区名称 | 用途 |
---|---|
Radio | 输出通信系统的log |
System | 输出系统组件的log |
Event | 输出event模块的log |
Main | 所有java层的log,以及不属于上面三层的log |
缓冲区主要是给系统组件使用的,一般的应用不需要考虑,应用的log都在main缓冲区中
默认log输出(不指定缓冲区的情况下)是输出System
和Main
缓冲区的log
获取缓冲区命令:
参数 | 描述 |
---|---|
-b |
加载一个可使用的日志缓冲区提供查看,默认是main |
实例:
1 | adb logcat –b radio |
logcat 参数
日志级别
由低到高
参数 | 含义 |
---|---|
V | Verbose(最低优先级)明细 |
D | Debug调试 |
I | Info 信息 |
W | Warning警告 |
E | Error 错误 |
F | Fatal 严重错误 |
S | Silent(Super all output) |
日志过滤器格式:tag: priority
示例:
1 | # 仅输出标记为“ActivityManager”且优先级大于等于“Info”和 标记为“PowerManagerService”并且优先级大于等于“Debug”的日志 |
tips:*:S
设置所有日志级别高于S的日志,由于没有这样级别,所以加上该过滤器可以确保只会输出符合条件的日志
参数
参数 | 描述 |
---|---|
-b | 加载一个可使用的日志缓冲区供查看,默认值为main |
-c | 清除缓冲区中的全部日志并退出(清除完成后可使用-g 查看) |
-g | 打印日志缓冲区的大小并退出 |
-d | 将缓冲区的log转存到屏幕中然后退出 |
-f | 将log输出到制定的文件中<文件名>,默认为标准输出(stdout) |
-n | 设置日志的最大数目,默认值为4,需要和-r选项一起使用 |
-r | 按照每千字节输出日志,默认值为16,需要和-f一起使用 |
-s | 设置过滤器 |
-v | 设置输出格式的日志消息 |
一般长时间输出log的话建议-f -n -r三个参数连用,这样当一个文件日志输出满了之后可以马上在另一个中进行输出(输出多个指定大小的日志文件)
示例:
1 | adb logcat -f /data/local/tmp/log.txt -n 2 -r 3 |
1 | adb logcat -b radio -v time > /tmp/event.log |
tips:-v time
表示在log中加入每条log发生的时间
格式化输出
-v更多格式:
格式 | 说明 |
---|---|
brief | 显示优先级/标记和过程的PID发出的消息(默认格式) |
process | 仅显示进程PID |
tag | 仅显示优先级/标记 |
thread | 仅显示进程:线程和优先级/标记 |
raw | 显示原始的日志信息,没有其他的元数据字段 |
time | 显示日期,调用时间,优先级/标记,PID |
long | 显示所有的元数据字段并且用空行分隔消息内容 |
示例:adb logcat -v thread
以上,完~