调试过程中,经常会出现很多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)).*$
网友评论