这篇的大部分内容是学习至<极客学院>的相关课程而来,因为学习后的实际使用过程中发现部分知识并没有讲解详细,所以决定结合自身实践,添补并总结一些相关内容.

好嘞~上菜!

 

Android log系统

logcat是Android中的一个命令行工具,可以用于得到程序的log信息,获取的主要是java层和c++层。

adb shell中echo的用法 adb shell logcat -c_java

 

 

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信息