如何使用Android adb logcat通过TAG名称排除某些消息?

Logcat允许过滤日志,但它的工作原理是这样的:您定义filter和logcat只显示匹配filter的消息。 但有没有办法显示所有的日志,除了filter定义的一些标签?

如果你正在使用adb logcat你可以通过greppipe道,并使用它的反向匹配:从grep的手册页 :

v,–invert-match反转匹配的意义,select不匹配的行。

例如:

 $adb logcat | grep --invert-match 'notshownmatchpattern' 

您可以使用正则expression式来扩展它。

这是一个这样的expression的例子:

 "/^(?:emails|tags|addresses)" 

这一个将检查给定发生,grep然后将不列出他们。

您可以从DDMS监视器(也是Eclipse或Android Studio)中使用正则expression式input框和负面预见断言来完成此操作 ,例如我从日志中排除了大量的噪音,如下所示:

 tag:^(?!(WifiMulticast|WifiHW|MtpService|PushClient)) 

(“tag:”不是正则expression式的一部分,但是告诉LogCat只应用正则expression式到Tag字段中,如果你在保存的filter中使用这个技巧,那么只需在“Tag”input框中input正则expression式,并省略“tag:”前缀)

在Android Studio的logcat监视器窗格中,可以通过打开右上angular的下拉菜单(可能会显示“仅显示选定的应用程序”并select“编辑filterconfiguration”)为此设置保存的filter。 创build一个新的logcatfilter,并将^(?!(WifiMulticast))放在日志标记框中,选中Regexcheckbox。

如果您想在Android Studio中通过标签名称排除或过滤某些消息,请转到LogCat窗口=>编辑filterconfiguration,然后在“按日志标记(正则expression式):”

 ^(?!(tag1|tag2|tag3|tag4)) 

请注意,没有空格,这很重要

在shell中,可以使用如下命令:

 adb logcat AlarmManagerService:S PowerManagerService:S *:V 

其中将包括除了那些具有AlarmManagerServicePowerManagerService标签的所有日志。

:S代表“silent”,这意味着这些标签将不会打印任何内容; :V代表“verbose”,这意味着所有其他标签都会打印一切.logcat的Android文档有更多其他选项的详细信息你可以在filter中使用。)

您也可以使用ANDROID_LOG_TAGS环境variables设置默认filter,例如(在bash中):

 export ANDROID_LOG_TAGS="AlarmManagerService:S PowerManagerService:S *:V" 

^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$

这将排除文字内容WindowManager,达尔维克,…

tag:^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$

这将从logcat中排除标签WindowManager,dalvik,…

结合积极和消极的前瞻更强大的过滤。

例:

 (?=(AndroidRuntime|Main|RandomTag))(?!(Audio)) 

包括在第一个嵌套圆括号中的标签。

第二个标签被排除在外。

在Eclipse Logcat视图中没有这样的选项。 但是,您可以使用日志级别来排除日志级别太低的任何消息。 例如, 将其设置为I(nfo)不会显示D(ebug)和(V)erbose消息。