Android Studio实现保留或过滤特定Log

调试过程中,经常会出现很多log,将有用的log刷掉,甚至有时候,log信息还会丢失,看不到想要的log,无疑大大降低了效率。这些问题都是可以解决的,Android studio的Logcat Filter能够完美胜任,而你需要了解如何使用,基本使用请参照官网开发指南,下面主要介绍如何保留或过滤特定的log。

Log丢失

在某些情况下,如fragment页面crash了,但所在的activity重建,这样就把crash信息丢失了(不知道是不是studio的bug...)。
解决:为该project添加Logcat Filter
在Studio的Android Monitor栏位中,选择Edit Filter Configuration,如下图

在打开的Create New Logcat Filter面板中添加一个filter,Package Name设置为当前project的包名,如下图

再次运行即可看到"丢失"的log

只保留特定的log

我们知道打印的Log有两部分,一是Tag,一是message,那么我们就可以根据Tag或message来过滤无关的log,由于message一般是不固定的,所以我们还是愉快地用Tag来实现这个吧。
假设我们要保留的的tag是“AAA”,那么在Create New Logcat Filter面板中,Log Tag栏位输入“AAA"即可。
如果是保留多个呢?假设现在除了”AAA“,还要保留"BBB",这个时候就要用上正则表达式了:
勾选Log Tag栏位后面的Regex选项,将"AAA"更改为"AAA|BBB"即可。
注意:由于运行过程中不能同时选择多个logcat filter联合过滤日志,所以只能在一个filter中通过正则表达式设置条件完成过滤。

到这里可能有同学就要问了,自己编写的代码,我能知道日志的Tag是什么,但源码或第三库打印出来的日志的Tag是什么呀?观察一下打印出来的日志:

09-04 16:35:58.550 6345-6345/com.example.logfilter D/AAA:  Tag a

格式如下:

date time PID-TID/package priority/tag: message

所以只要看到日志,就能根据位置知道该日志的Tag和message。这里,PID 代表进程标识符,TID 则为线程标识符;如果仅有一个线程,两者可以相同。

过滤特定的log

过滤掉特定的log需要使用正则表达式,勾选Regex选项,在Log Tag中输入

^(?!.*(AAA)).*$

其中AAA是要过滤的tag,适用去掉无用重复的log,如:使用SurfaceView时,经常会弹出过多绘制的log,导致刷屏。
如果需要过滤多个呢,假设还需要过滤"BBB",将

^(?!.*(AAA)).*$

修改为

^(?!.*(AAA|BBB)).*$ 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,958评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,403评论 25 708
  • 2017年5月17日 Kylin_Wu 标注(★☆)为考纲明确给出考点(必考) 常见手机系统(★☆) And...
    Azur_wxj阅读 1,838评论 0 10
  • 怎么如此平静, 感觉像是走错了片场.为什么呢, 因为上下游工作在同一个线程呀骚年们! 这个时候上游每次调用emit...
    Young1657阅读 1,511评论 2 1
  • 习题1 选择你任意熟悉的项目/产品/领域,根据自己对业务的理解,定义出一组量化的数据指标(不少于5个),并根据之前...
    万能滴小笼包阅读 1,094评论 2 5