如何在Eclipse LogCat查看器中过滤掉标签名

77

我有一个Android应用程序会在LogCat中不停地输出信息,我希望能够删除这些日志,以便输出更易读。

是否可以使用过滤器来删除特定标签名称的LogCat条目?或者有没有搜索模式可以实现这个功能?


@pankaj 这不完全是我想要的。 我想要一种删除特定条目而不是隔离它们的方法。 - Jleuleu
7个回答

186

可以的。创建一个过滤器,其中"按日志标签"字段为

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

其中MYTAG是您不想看到的标签。我不是一个正则表达式专家(“regexpert”?;-)),因此可能有更简单的方法来做这个否定,但我刚试过了它可以工作。

您可以在Log Cat消息区域上方的筛选器字段中玩弄过滤器,通过在那里输入过滤字符串,例如:

tag:^(?!.*(DeskClock|dalvik|wpa)).*$

这将显示所有消息,除了"DeskClock"、"dalvik"和"wpa"标签。


您还可以将此正则表达式添加到Eclipse LogCat视图中列表上方的搜索栏中。谢谢! - SMBiggs
谢谢。我一直有问题构建正则表达式,只显示不匹配的输出。非常有帮助。DDMS现在真的很有用。 - chriv
有人可以解释一下这个表达式是如何工作的吗? - Price
1
你可以通过将表达式更改为以下形式来适应任意数量的标签:^(?!.*(tag1|tag2|tag3|...|tagn)).*$ - Reuben Tanner

9
这可能与问题不直接相关,但以下是一个正则表达式,当您将其放入标签过滤器中时,可以过滤掉大多数系统生成的日志(由Rob描述)。
^(?!(WifiMulticast|WifiHW|MtpService|PushClient|InputMethodManager|Provider|SurfaceTextureClient|ImageLoader|dalvikvm|OpenGLRenderer|skia|AbsListView|MediaPlayer|AudioManager|VelocityTracker|Drv|Jpeg|CdpDrv|IspDrv|TpipeDrv|iio|ImgScaler|IMG_MMU|ResMgrDrv|JpgDecComp|JpgDecPipe|mHalJpgDec|PipeMgrDrv|mHalJpgParser|jdwp|libEGL|Zygote|Trace|InputEventReceiver|SpannableStringBuilder|IInputConnectionWrapper|MotionRecognitionManager|Choreographer|v_galz|SensorManager|Sensors|GC|LockPatternUtils|SignalStrength|STATUSBAR-BatteryController|BatteryService|STATUSBAR-PhoneStatusBar|WifiP2pStateTracker|Watchdog|AlarmManager|BatteryStatsImpl|STATUSBAR-Clock))

在测试不同设备时,我会不断更新标签列表。该列表并非详尽无遗,欢迎您为此答案做出贡献。相信这将为许多人节省一小时。

如果您需要过滤其他日志,请使用“|”字符将它们附加到此正则表达式中。


8

根据你查看logcat的方式而定。

如果你使用GUI logcat接口,最好为你想要查看的标签创建一个过滤器。它们被放在一个单独的类别中。虽然界面有点变化,但是你可以使用这个我之前发布的老答案。它应该很清楚如何使用 (确保"显示保存的过滤器选项卡"按钮被按下,否则你将无法看到"添加过滤器"按钮。你可以在日志的右上角找到它)。我不知道是否有任何选项可以让你从整个日志流中筛选出某些标签。

如果你使用命令行,你可以禁止某些标签。例如:

adb logcat AndroidRuntime:S *:V

该命令(*:V)显示所有日志级别的信息,除了标签AndroidRuntime,该标签将被限制在“silence”日志级别,这意味着它不会打印任何内容。

要显示单个标签,您可以使用以下命令:

adb logcat *:S MyAppTag:V OtherTag:V

同样的方式,除了和之外,所有内容都会被静音。更多详细信息请参考日志输出过滤

谢谢,adb logcat <tag-name>:S *:V 正是我所寻找的。我希望在 Eclipse GUI 的日志界面中也能有同样的效果,但现在我将使用命令行。 - Jleuleu

5

我在Android Studio中无法使所选解决方案正常工作(这是未来版本的Android SDK将使用的IDE)。然而,以下正则表达式解决了我的问题:

^(?!dalvikvm)

3
我有一个技巧:
 Log.d(TAG, "MyTag" + message);

正如您所看到的,当我使用“MyTag”作为关键字进行筛选时,它只显示来自我的标签的日志。

1
这是一个晚回复,但可能有用。 在Eclipse环境中,在LogCat视图中,表格上方有一个搜索框。 请注意,当为空时,它会显示:

搜索信息。接受Java正则表达式。前缀可以是pid:、 app:、 tag:或text:来限制范围。

这意味着您可以通过在此处编写tag:MyTag或甚至使用正则表达式tag:My.*来过滤您的标签。


-1

过滤掉非本应用程序的日志消息的另一种方法是选择:

日志级别:详细

“仅显示选定的应用程序”(从筛选器选择下拉菜单中)

然后在logcat窗口的可调试列表中从下拉菜单中选择您的应用程序。

这样只会显示来自您的应用程序的日志消息和输出。


无论如何,您需要使用正则表达式来过滤掉不想要的纹理说明和其他带有您应用程序名称的内容。 - Davideas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接