我有一个Android应用程序会在LogCat中不停地输出信息,我希望能够删除这些日志,以便输出更易读。
是否可以使用过滤器来删除特定标签名称的LogCat条目?或者有没有搜索模式可以实现这个功能?
可以的。创建一个过滤器,其中"按日志标签"字段为
^(?!.*(MYTAG)).*$
其中MYTAG
是您不想看到的标签。我不是一个正则表达式专家(“regexpert”?;-)),因此可能有更简单的方法来做这个否定,但我刚试过了它可以工作。
您可以在Log Cat消息区域上方的筛选器字段中玩弄过滤器,通过在那里输入过滤字符串,例如:
tag:^(?!.*(DeskClock|dalvik|wpa)).*$
这将显示所有消息,除了"DeskClock"、"dalvik"和"wpa"标签。
^(?!.*(tag1|tag2|tag3|...|tagn)).*$
。 - Reuben Tanner^(?!(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))
在测试不同设备时,我会不断更新标签列表。该列表并非详尽无遗,欢迎您为此答案做出贡献。相信这将为许多人节省一小时。
如果您需要过滤其他日志,请使用“|”字符将它们附加到此正则表达式中。
根据你查看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我在Android Studio中无法使所选解决方案正常工作(这是未来版本的Android SDK将使用的IDE)。然而,以下正则表达式解决了我的问题:
^(?!dalvikvm)
Log.d(TAG, "MyTag" + message);
搜索信息。接受Java正则表达式。前缀可以是pid:、 app:、 tag:或text:来限制范围。
这意味着您可以通过在此处编写tag:MyTag或甚至使用正则表达式tag:My.*来过滤您的标签。
过滤掉非本应用程序的日志消息的另一种方法是选择:
日志级别:详细
“仅显示选定的应用程序”(从筛选器选择下拉菜单中)
然后在logcat窗口的可调试列表中从下拉菜单中选择您的应用程序。
这样只会显示来自您的应用程序的日志消息和输出。