如何使用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
等))
放在日志标记框中,选中Regex
checkbox。
如果您想在Android Studio中通过标签名称排除或过滤某些消息,请转到LogCat窗口=>编辑filterconfiguration,然后在“按日志标记(正则expression式):”
^(?!(tag1|tag2|tag3|tag4))
请注意,没有空格,这很重要
在shell中,可以使用如下命令:
adb logcat AlarmManagerService:S PowerManagerService:S *:V
其中将包括除了那些具有AlarmManagerService
和PowerManagerService
标签的所有日志。
( :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消息。