logcat 工具在做android开发的过程中肯定是必不可少的,这里介绍几个我认为比较方便的logcat命令。

三 adb Log过滤:

1. 只显示需要的输出,白名单
最方便的当然是通过管道使用 grep 过滤了,这样可以使用 grep 强大的正则表达式匹配。简单的匹配一行当中的某个字符串,例如 MyApp:
adb logcat | grep MyApp
adb logcat | grep -i myapp #忽略大小写。

2 保存log

-d              dump the log and then exit (don't block)

logcatdump的文件


使用-d参数,可以在读完所有log后返回,而不会一直等待,在自动化较有用。例如:
adb logcat -d -s xxx > xxx.log //得到filter为xxx的日志,存入xxx.log,然后返回。



可用日志缓冲区

adb logcat  -b  <buffer>

加载一个可使用的日志缓冲区供查看,比如event 和radio . 默认值是main 。具体查看Viewing Alternative Log Buffers.


-b 

  • radio — radio打出来的log和音频信息相关
  • events —events打出来的log和android中keyevent,motionevent等响应事情有关
  • main — main是默认的选项,应该跟直接adb logcat 效果一样

例如:

adb logcat -b events 2>&1 | tee events

这里有个-b 和 -d 的区别:
adb logcat -v time -b radio   // 打印缓冲区内的radio 日志,是时时更新的,只要串口没断

adb logcat -v time -d radio  // 打印从开机到此时的缓冲区内的radio 日志

struct logger_log {
    unsigned char       *buffer;/* the ring buffer itself */
    struct miscdevice   misc;   /* misc device representing the log */
    wait_queue_head_t   wq; /* wait queue for readers */
    struct list_head    readers; /* this log's readers */
    struct mutex        mutex;  /* mutex protecting buffer */
    size_t          w_off;  /* current write head offset */
    size_t          head;   /* new readers start here */
    size_t          size;   /* size of the log */
};
这是android内核中logger总最基本的结构,链表且首尾相连,系统中有4个这样的环形结构分别是main,events,radio,system。
 -b 选项使用方法:   
      [adb] logcat [-b <buffer>] 
     下面的例子表示怎么查看日志缓冲区包含radio 和 telephony信息: 
      adb logcat -b radio

1. adb logcat;

这个最简化的一个打log的命令,不过默认打出的log信息太少,个人很少用

2. adb logcat -v time;

增加加了打印时间信息


3. adb logcat -v threadtime;


这个用的最多,不仅打印了时间而且还打印了PID 和 TID,在看log的时候可以通过PID 和 TID 进一步的过滤,比较方便,TID对于调试多线程的ap很方便


4. adb logcat -v threadtime -b radio;


有的时候需要看radio的log,可以用这个了。


5. adb logcat -v threadtime | grep "keyword" ;


对于只是想看一些关键调试信息的时候,用grep命令实时的查看结果就比较方便了


6. adb logcat -v threadtime TAG1:v TAG2:v ... *:s ;


如果有多个TAG 标签,keyword不统一,不方便用grep,那么用各自的TAG标签就比较好一些,同时还可以根据log级别来过滤。