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
以上,完~