美文网首页Android开发经验谈Android开发Android开发
Android Studio实现保留或过滤特定Log

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

作者: Clement_wu | 来源:发表于2017-09-04 17:12 被阅读1951次

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

    相关文章

      网友评论

        本文标题:Android Studio实现保留或过滤特定Log

        本文链接:https://www.haomeiwen.com/subject/whrejxtx.html