adb logcat教程

1.速查

$adb logcat -g     //打印和缓冲区使用情况
$adb logcat -c main   //清除main缓存区
$adb logcat -v threadtime -f /data/camera.log | grep -Ei "camera | daemon"
  • -v threadtime 输出格式 ,默认是 brief
  • -f /data/camera.log 保存到文件
  • grep -Ei "camera | daemon" 是过滤,-i是忽略大小写,E是指定多个过滤字符串,logcat的自代过滤器(tag:优先级)不好用!

2.先要知道的第一件事

  android把log输出到不同的缓冲区中,常见的几个log缓冲区:

缓冲区 描述
radio 输出通信系统的log
system 输出系统组件的log
crash 崩溃日志
events 输出event模块的log
main

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

all

全部

3.先要知道的第二件事

  • 有两个logcat : adb logcat 与 adb shell logcat 命令不同,使用场景不同。
  • logcat有很多参数:adb logcat --help 可查看。 

4.参数详解

第1个参数:打印各日志缓冲区的大小并退出

$adb logcag -g

  结果如下:

main: ring buffer is 256Kb (235Kb consumed), max entry is 5120b, max payload is 4076b
system: ring buffer is 256Kb (238Kb consumed), max entry is 5120b, max payload is 4076b
crash: ring buffer is 256Kb (242Kb consumed), max entry is 5120b, max payload is 4076b

第2个参数:打印某个缓冲区日志

$adb logcat -b system

默认是 -b main -b system -b crash.

第3个参数:设置log的输出格式

$adb logcat -v threadtime

threadtime是输出格式,常见输出格式:

格式

说明

brief 显示优先级/标记和过程的PID发出的消息(默认格式)
process 只显示PID
tag 只显示优先级/标记
raw 显示原始的日志消息,没有其他元数据字段
time 调用显示日期、时间、优先级/标签和过程的PID发出消息
thread 过滤线程
threadtime 调用显示日期、时间、优先级、标签以及PID TID线程发出的消息
long 显示所有元数据字段与空白行和单独的消息

 

 

 

 

 

 

 

第4个参数:设置过滤器[ tag名:优先级 ] ,默认是[*:I]

$adb logcat ActivityManager:I YourApp:D *:S

这个命令指定了3个过滤器:

  • ActivityManager:I
  • YourApp:D
  • *:S

其中ActivityManager和YourApp是tag,I 、D 、S是优先级。优先级表如下:从低到高

V Verbose(最低优先级)
D Debug
I Info
W Warning
E Error
F Fatal
S Silent

再来一个例子:

$adb logcat *:E 

第5个参数:输出到文件(注意文件保存在设备上)

$adb logcat -v threadtime -f /data/camera.log

5.详解,有些参数可以合并一起,最好分开,如 -v xxx -f xxx

Usage: logcat [options] [filterspecs]
options include:
  -s              Set default filter to silent.
                  Like specifying filterspec '*:s'
  -f <filename>   Log to file. Default to stdout
  -r [<kbytes>]   Rotate log every kbytes. (16 if unspecified). Requires -f
  -n <count>      Sets max number of rotated logs to <count>, default 4
  -v <format>     Sets the log print format, where <format> is one of:

                  brief process tag thread raw time threadtime long

  -c              clear (flush) the entire log and exit
  -d              dump the log and then exit (don't block)
  -t <count>      print only the most recent <count> lines (implies -d)
  -t '<time>'     print most recent lines since specified time (implies -d)
  -T <count>      print only the most recent <count> lines (does not imply -d)
  -T '<time>'     print most recent lines since specified time (not imply -d)
                  count is pure numerical, time is 'MM-DD hh:mm:ss.mmm'
  -g              get the size of the log's ring buffer and exit
  -b <buffer>     Request alternate ring buffer, 'main', 'system', 'radio',
                  'events', 'crash' or 'all'. Multiple -b parameters are
                  allowed and results are interleaved. The default is
                  -b main -b system -b crash.
  -B              output the log in binary.
  -S              output statistics.
  -G <size>       set size of log ring buffer, may suffix with K or M.
  -p              print prune white and ~black list. Service is specified as
                  UID, UID/PID or /PID. Weighed for quicker pruning if prefix
                  with ~, otherwise weighed for longevity if unadorned. All
                  other pruning activity is oldest first. Special case ~!
                  represents an automatic quicker pruning for the noisiest
                  UID as determined by the current statistics.
  -P '<list> ...' set prune white and ~black list, using same format as
                  printed above. Must be quoted.

filterspecs are a series of 
  <tag>[:priority]

where <tag> is a log component tag (or * for all) and priority is:
  V    Verbose
  D    Debug
  I    Info
  W    Warn
  E    Error
  F    Fatal
  S    Silent (supress all output)

'*' means '*:d' and <tag> by itself means <tag>:v

If not specified on the commandline, filterspec is set from ANDROID_LOG_TAGS.
If no filterspec is found, filter defaults to '*:I'

If not specified with -v, format is set from ANDROID_PRINTF_LOG or defaults to "brief"

 



 

posted @ 2017-02-24 15:51  f9q  阅读(1271)  评论(0编辑  收藏  举报