adb - logcat

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了adb - logcat相关的知识,希望对你有一定的参考价值。

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

好嘞~上菜!

 

android log系统

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

技术分享

 

 

 

 

logcat命令格式

 

语法格式:

  adb shell logcat [<参数>]...[<优先级过滤>]

 

PC端执行:

  >>> adb shell logcat [<参数>]...[<优先级过滤>]

 

shell执行:

  >>> adb shell

  >>> logcat [<参数>]...[<优先级过滤>]

 

停止输出:

  ctrl+c

 

 

 

 

logcat缓冲区介绍

 

AndroidLog输出量巨大,特别是通信系统的Log,因此AndroidLog输出到不同的缓冲区中。

目前定义了4Log缓冲区:

 

        Radio:输出通信系统的Log

 

        System:输出系统组件的Log

 

        Event:输出事件模块的log

 

        Main:所有java层的log,以及不属于上面3层的log

 

 

缓冲区主要给系统组件使用,一般的应用无需关心,应用LOG都输出到main缓冲区中。

 

 

 

 

 

logcat命令参数

 

 

 

命令

效果

-b<缓冲区>

radio:输出通信系统的Log

system:输出系统组件的Log

event:输出event模块的log

main:所有java层的log,以及不属于上面3层的log

 

加载查看指定的日志缓冲区信息,默认mainsystem

-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.

 

注意:

 

  1.-f只能指定手机内的路径

 

  2.使用>指定PC路径也可以存储,但是这样所有log会写入一个文件中,如果你操作时间较长可以想象一下,打开一个几十Mlog那画面太美了~

 

 

 

 

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:

  代指你想过滤的’元数据字段’,这个东西开发人员可以设置

    1.推荐与开发人员沟通,设置为包名,方便过滤

    2.如果开发不给改,可以向开发人员询问’元数据字段’被设置为什么(官方推荐的是相关log类的类名)

    3.如果开发还是不给帮助,可以使用过滤字符串:adb shell logcat | find “包名” ,来过滤与你包名有关的log

 

*:

  指其它所有的log信息

 

菜齐了!!!

 

以上是关于adb - logcat的主要内容,如果未能解决你的问题,请参考以下文章

adb卸载和安装系统应用

adb 查看系统设置参数

adb命令——基础系统类命令

Android系统之adb

Android系统之adb

android系统如何通过$ adb 来获得/data/data目录的访问权限