在开发Android应用程序时,经常要用到日志查看工具Logcat。Logcat工具内置在Android系统中,可以通过Eclipse的窗口或主机上的adb logcat命令来查看运行在模拟机/真机上的日志。关于Logcat的学习,我把它分成了两部分内容:一部分是如何使用,分为在GUI界面下的使用和直接使用adb logcat;另一部分是Logcat源代码简要分析。本文将重点介绍如何使用Logcat。
怎样过滤日志?
没有过滤的Logcat,All message(no filters)显示的信息如下:
Level | Time | PID | TID | Application | Tag | Text |
---|---|---|---|---|---|---|
日志级别 | 时间 | 进程id | 线程id | 应用程序名(包名) | 过滤标签 | 输出信息 |
-
方案 I. 定制日志过滤器
可以选择日志级别,也可以设置过滤标签,例如在by Log Tag中输入正则表达式:
^(?!.*(MyTag)).*$
MyTag表示需要过滤的Tag黑名单,例如:
^(?!.*(System.err|dalvik|MyTag1|Mytag2|…|MyTagn)).*$
方案 II. 在Logcat窗口过滤
直接在Logcat窗口的Search for message栏输入正则表达式,MyTag表示需要过滤的Tag黑名单:
tag:^(?!.*(MyTag1|MyTag2|…|MyTagn)).*$
方案 III. 使用adb logcat
最简单的就是使用adb通过管道使用grep过滤,通过grep强大的正则表达式匹配某段字符串,例如:
adb logcat | grep MyFilterInfo
MyFilterInfo是需要过滤的log白名单(和Tag黑名单不同,log白名单可以过滤所有栏而不仅仅是Tag栏)
怎样保存日志?
和过滤日志一样,保存也分为Eclipse下使用Logcat窗口和直接使用adb logcat指令
方案 I. (Eclipse下)选中要保存的日志并点击保存按钮
方案 II. adb logcat
该方法是阻塞的,即只要不关闭adb,MyLog文件中的日志就会实时更新并保存。查看文件可以通过Mac下的控制台.app。
adb logcat > MyLog
在交互式的shell环境下保存日志,方法非阻塞,日志也可以通过文本编辑.app查看,所以也可以保存成MyLog.txt
adb shell logcat > MyLog
以上方法,日志的保存路径都可以自定义,例如
adb logcat > /Users/Elsa/Eclipse/MyLog
adb logcat 还有更多强大的功能,例如设置日志输出格式、清空日志缓存、输出最近日志、过滤指定标签/等级日志等。Ubuntu下使用adb logcat显示Android日志 一文给出了许多用法示例,想深入学习的话可以参考。