这篇的大部分内容是学习至<极客学院>的相关课程而来,因为学习后的实际使用过程中发现部分知识并没有讲解详细,所以决定结合自身实践,添补并总结一些相关内容.
好嘞~上菜!
Android log系统
logcat是Android中的一个命令行工具,可以用于得到程序的log信息,获取的主要是java层和c++层。
logcat命令格式
语法格式:
参数>]...[<优先级过滤>]
PC端执行:
参数>]...[<优先级过滤>]
shell执行:
>>> adb shell
参数>]...[<优先级过滤>]
停止输出:
ctrl+c
logcat缓冲区介绍
Android的Log输出量巨大,特别是通信系统的Log,因此Android把Log输出到不同的缓冲区中。
目前定义了4个Log缓冲区:
:输出通信系统的Log
:输出系统组件的Log
:输出事件模块的log
:所有java层的log,以及不属于上面3层的log
缓冲区主要给系统组件使用,一般的应用无需关心,应用LOG都输出到main缓冲区中。
logcat命令参数
命令 | 效果 |
-b<缓冲区> radio:输出通信系统的Log system:输出系统组件的Log event:输出event模块的log main:所有java层的log,以及不属于上面3层的log
| 加载查看指定的日志缓冲区信息,默认main和system |
-c | 清除缓冲区中的全部日志并退出 |
-d | 将缓冲区的log转存到屏幕中,然后退出 |
-f<文件名> | 将log输出到指定的文件中。 |
-g | 打印日志缓冲区的大小并退出 |
-n<数量> | 设置输出日志的文件数的最大数目,默认值是4,需要和-r一起使用。 |
-r<字节> | 每XX字节输出一个日志,默认值为16,需要个-f一起使用。 |
-s <设备号> | 过滤器 |
-v<格式> | 设置输出格式的日志消息。默认是短暂的格式。支持的格式列表见格式化输出。 |
命令格式:
>>> adb shell logcat -n 200 -r 50 -f /mnt/sdcard/log/logcat.log
解读:
输出.log到-f的地址,每个文件50KB,写200个.
注意:
只能指定手机内的路径
使用>指定PC路径也可以存储,但是这样所有log会写入一个文件中,如果你操作时间较长可以想象一下,打开一个几十M的log那画面太美了~
logcat格式化输出
log信息==’元数据字段’:’log内容’
可以修改输出显示一个特定的元数据字段格式的消息,为此使用-v选项来指定一个支持的输出格式,一下为支持的格式。
drief | 显示优先级/标记和过程的PID发出的消息(默认格式) |
process | 只显示PID |
tag | 只显示优先级/标记 |
raw | 显示原始的日志消息,没有其它元数据字段 |
time | 调用显示日期、时间、优先级/标签和过程的PID发出消息 |
threadtime | 调用显示日期、时间、优先级、标签以及PID TID线程发出的消息 |
long | 显示所有元数据字段与空白行和单独的消息 |
命令格式:
>>> adb shell logcat -v tag
解读:
用tag模式输出log信息
还可以指定多种模式组合输出
命令格式:
>>> adb shell logcat -v tag -v time
logcat优先级
优先级从低到高
V(String,String)(verbose) | 显示全部信息 |
D(String,String)(debug) | 显示调试信息 |
I(String,String)(information) | 显示一般信息 |
W(String,String)(warning) | 显示警告信息 |
E(String,String)(error) | 显示错误信息 |
F(String,String)(fatal) | 显示严重错误 |
S(String,String)(silent) | 显示,无输出 |
为了减少日志的输出,以及有效的过滤多余的信息,可以建立一个过滤器
过滤语法 : 元数据字段:优先级
例子:
adb shell logcat ActivityManager:I Myapp:D *:S
解读:
显示’ActivityManager’大于I的日志,显示’Myapp’大于D的日志,其余日志不显示
ActivityManager:
Activity交互提供了接口,主要的接口围绕着运行中的进程信息,任务信息,服务信息等。直接翻译就是”Activity管理器”,建议过滤显示.
Myapp:
这个东西开发人员可以设置
,设置为包名,方便过滤
,可以向开发人员询问’元数据字段’被设置为什么(官方推荐的是相关log类的类名)
,可以使用过滤字符串:adb shell logcat | find “包名” ,来过滤与你包名有关的log
*:
指其它所有的log信息