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)
adb logcat -d > logcatdump 将logcat输出保存为名为logcatdump的文件
使用-d参数,可以在读完所有log后返回,而不会一直等待,在自动化较有用。例如:
adb logcat -d -s xxx > xxx.log //得到filter为xxx的日志,存入xxx.log,然后返回。
adb logcat查看可用日志缓冲区
adb logcat -b <buffer>
加载一个可使用的日志缓冲区供查看,比如event 和radio . 默认值是main 。具体查看Viewing Alternative Log Buffers.
Android日志系统有循环缓冲区,并不是所有的日志系统都有默认循环缓冲区。为了得到 日志信息,你需要通过-b 选项来启动logcat 。如果要使用循环缓冲区,你需要查看剩余的 循环缓冲期:
- 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;
增加加了打印时间信息
这个用的最多,不仅打印了时间而且还打印了PID 和 TID,在看log的时候可以通过PID 和 TID 进一步的过滤,比较方便,TID对于调试多线程的ap很方便
有的时候需要看radio的log,可以用这个了。
对于只是想看一些关键调试信息的时候,用grep命令实时的查看结果就比较方便了
如果有多个TAG 标签,keyword不统一,不方便用grep,那么用各自的TAG标签就比较好一些,同时还可以根据log级别来过滤。