如何使用 Android adb logcat 按标签名称排除某些消息?

Posted

技术标签:

【中文标题】如何使用 Android adb logcat 按标签名称排除某些消息?【英文标题】:How to exclude certain messages by TAG name using Android adb logcat? 【发布时间】:2011-07-27 13:18:36 【问题描述】:

Logcat 允许过滤日志,但它的工作原理是这样的:您定义过滤器,而 logcat 只显示与过滤器匹配的消息。但是有没有办法显示除过滤器定义的某些 TAG 之外的所有日志?

【问题讨论】:

相关帖子 - How to exclude Log Tag in logcat android Studio? 【参考方案1】:

您可以在 DDMS Monitor(以及 Eclipse 或 Android Studio)中使用正则表达式输入框和 negative look-ahead assertions 执行此操作,例如,我使用以下内容从日志中排除了很多噪音:

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

("tag:" 不是正则表达式的一部分,但它告诉 LogCat 仅将正则表达式应用于 Tag 字段。如果您在保存的过滤器中使用此技巧,则只需将正则表达式放在 "Tag " 输入框,并省略 "tag:" 前缀)

在 Android Studio 的 logcat 监视器窗格中,您可以为此设置一个已保存的过滤器,方法是打开右上角的下拉菜单(可能选择了“仅显示选定的应用程序”)并选择编辑过滤器配置。创建一个新的 logcat 过滤器并输入^(?!(WifiMulticast ...等。 )) 在日志标签框中,选中 Regex 复选框。

【讨论】:

Eclipse LogCat 的好解决方案 我的视线立刻变得不那么模糊了! :D 这是我一直在寻找的东西 工作就像魅力!非常感谢。在其中添加单词“dalvikvm”。这在 logcat 中最烦人。 使用 logcat 过滤的答案是正确的 - ***.com/a/17468665/828237【参考方案2】:

如果您想在Android studio中通过标签名称排除或过滤某些消息,请转到LogCat窗口=>编辑过滤器配置,并在“by Log Tag(regex):”下输入以下内容

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

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

【讨论】:

此答案适用于 intellij 15 的 logcat > Edit Filter Configuration,它会显示一个名为“Create New Logcat Filter”的模式。 谢谢。顺便说一句,联想手机有很多垃圾邮件日志消息 这只会阻止带有该标签的日志被呈现到日志中。 Monitor 仍然在后台被这些调用淹没,它将非“tag1|tag2|etc”调用推出缓冲区。有办法解决吗? 使用 logcat 过滤的答案是正确的 - ***.com/a/17468665/828237 或者如果一个标签^(?!tag1)【参考方案3】:

如果您使用的是adb logcat,您可以通过 grep 管道并使用它的反向匹配: 来自grep manpage:

v, --invert-match 反转匹配感,选择不匹配的行。

例如:

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

您可以使用regular expressions 扩展它。

这是一个这样的表达式的例子:

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

这会检查任何一个给定的发生,然后 grep 不会列出它们。

【讨论】:

@zest grep 是标准的 unix 命令。对于 Windows,您可以尝试find /V "notshownmatchpattern"。附言显然,adb shell 也有一个grep。但和标准的unixgrep不一样! 是的,我已经找到了,findstr - 糟透了,可以安装 powershell 或 grep(适用于 windows :),与自述文件中写的 Linux 相同,但实际上并没有那么多)跨度> 不,我只是建议 Windows 使用 git 命令行工具安装 git。这将为 windowze 安装所有基本的 unix 命令行工具。 或在windowze上为常用的unix命令行工具安装clink @PCoder 你能写出整个命令来用 windows CMD 做同样的事情吗?【参考方案4】:

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

adb logcat AlarmManagerService:S PowerManagerService:S *:V

这将包括除带有AlarmManagerServicePowerManagerService 标签的日志之外的所有日志。

(:S 代表“静音”,这意味着不会为这些标签打印任何内容;:V 代表“详细”,这意味着将为所有其他标签打印所有内容。Android documentation for logcat 有更多您可以在过滤器中使用的其他选项的详细信息。)

您还可以使用ANDROID_LOG_TAGS 环境变量来设置默认过滤器,例如(在 bash 中):

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

【讨论】:

这是一个很好的建议,可以在没有管道的命令行中工作。您应该更新您的答案恕我直言,以解释“:S”部分只会为命名组件发出严重的消息(这几乎不会发生)。再次,很好的答案。人们应该投票赞成这个...... @ChrisMarkle 根据文档,S 代表“沉默”。正如你所建议的,我已经更新了答案来解释这一点。 您可以使用环境变量 ANDROID_LOG_TAGS 以相同的方式过滤 logcat 输出。我发现将其始终设置为排除一些更垃圾的进程很有用。【参考方案5】:

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

这将排除具有 WindowManager,dalvik,... 内容的文本

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

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

【讨论】:

更多:^(?!(WifiMulticast|WifiHW|MtpService|PushClient|EGL_emulation|OpenGl*|InputReader|art|dalvik|Environment|DataRouter|AlarmManager|WindowManager|PhoneStatusBar|ActivityManager|ResourceType|PackageManager|gralloc*)) 还有更多:(Gnss|NetRec|ResolverController|GAv4|AsyncOperation|AppOps|WificondControl|aofp|wifi|netmgr|ctxmgr|BestClock|FirebaseInstanceId|android.os.Debug|memtrack|netd|system_server| StrictMode|bluetooth|NetworkMonitor|FA|BroadcastQueue|ConnextivityService|WakeLock|HttpClientWrapper|RAWR|Tenor|BgTask|WifiService|BluetoothAdapter|UpdateStatsService|AppIdleHistory|Connectivity|VelvetNetworkClient|WorkerManager|EGL_emulation|chatty|gralloc|InputReader|ActivityThread|ActivityTaskManager|UsageStatsService| ocess.gservice|DropBoxManagerService|EventLogChimeraService|PContextMetricsRunner))【参考方案6】:

结合正向和负向预测以获得更强大的过滤。

例子:

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

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

排除第二个标签。

【讨论】:

恕我直言,这是一种更全面的日志过滤方式。【参考方案7】:

您还可以选择在 Android Studios logcat GUI 中制作自己的过滤器。 例如。我对 logcat 中的 OpenGLRenderer 和 ViewRoot 消息感到非常恼火。

在 logcat 中单击编辑过滤器配置并创建一个新过滤器。 在日志标签输入中,您可以输入 ^(?!.*(OpenGLRenderer|ViewRoot)) 之类的内容并添加其他几个让您烦恼的标签。

【讨论】:

【参考方案8】:

这是我一直用来忽略Samsung系统日志的过滤器列表。也可以与其他设备一起使用。

Logcat -> 编辑过滤器配置 -> 日志标签

^(?!(PowerUI|PowerPlanningReceiver|BatteryService|SamsungPhoneWindowManager|MotionRecognitionService|AudioService|APM_AudioPolicyManager|SensorService|StorageManager|SignalClusterView|BatteryService|TelephonyManager|UsbDeviceManager|KeyguardUpdateMonitor|BatteryController|ActivityManager|LauncherAppsService|AppsModel|DataLoader|PackageManager|LauncherApps|ContactsImsCommon|ImsUtil|ImsSettingsProvider|DeviceConfigManager|WifiService|BackupManagerService|PersonaManagerService|DefaultDialerManager|ResourceType|NetworkUIGlobals|NetworkProxy|FileWriteThread|ReflectUtil|PhoneApp|SamsungAlarmManager|display|DeviceStorageMonitorService|wrapperGPS|io_stats|GnssLocationProvider|KeyguardServiceBoxContainer|ConnectivityService|s-s-rM|TLC_TIMA_PKM_initialize|mc_tlc_communication|TeeDriverClient|TLC_TIMA_PKM_measure_kernel|AutomaticBrightnessController|BatteryUtils|WifiConnectivityManager|Launcher|IconView|ApplicationPackageManager|LiveIconLoader|WifiScanningService|WifiHAL|WifiScanController|ApplicationPolicy|SELinux|TimaKeyStoreProvider|ActivityThread|zygote|GservicesProvider|GoogleHttpClient|cr_ChildProcessConnect|WificondControl|Netd|Tethering|ContactsImsCommon|ImsConstants|tnet-jni|BatteryStatsService|SignalClusterView|LiveIconManager|BitmapCacheContainer|com.samsung.android.app.powerplanning.utils.BatteryUtils|ReflectField|cr_ChildConnAllocator|TinLoadingFailTracker|WifiPermissionsUtil|EventHandler_FLP|android.hardware.wifi@1.0-service|BluetoothAdapter|bt_btm|WifiPermissionsUtil|GeofencerStateMachine|Places|GCoreUlr|BeaconBle|Sensors|SLocation|ContactsProvider_EventLog|WificondScannerImpl|AlarmManager|AlarmManagerEXT|MultiDex|NetworkSecurityConfig|DnsProxyListener|dalvik-internals|mobileconfig|SsacManager|ImsPhoneStateManager|VolteServiceModule|PdnController|PowerManagerService|GameManagerService|NoSync|SensorManager|DisplayPowerController|NetworkController|SamsungAnalytics111040|tlcFidoAuthnr|InputReader|FlashlightController|KeyguardWallpaperController|OpenGLRenderer|EasyMuteController|Vibrator|VibratorService|PowerManagerUtil|LightsService|WindowManager|InputDispatcher|InputReader|CustomFrequencyManagerService|SystemUIAnalytics|SamsungAnalytics|swipe|PanelView|BadgeCache|MARsPolicyManager|MARsDBManager|KeyguardClockPage|ScanManager|RegiMgrBase|secImsManager|GeolocationController|MultiSimUtils|CarrierText|Mms|NetworkNotificationUI2|CommandListener|ReschedulableTimer|RCS-ContactsImsCommon|Settings|DmConfigModule|NotificationMgr2|PhoneMultiSimUtils|PhoneProxy|VideoCapabilities|AudioCapabilities|SAIV_FACE|FaceController|FaceService|SamsungAnimationCreator|ImageWallpaper|Finsky|VirtualScreen|PagedView|DragLayer|HomeContainer|ImsServiceStub|DmConfigHelper|TZ))

【讨论】:

【参考方案9】:

一个简单的方法是只过滤你想看到的标签。

adb logcat -s "Tag1" -s "Tag2" -s "Tag3"

只会显示那些标签。

【讨论】:

【参考方案10】:

这是我收集到的最常见的烦人标签

^(?!.*(OpenGLRenderer|ViewRoot|ForceDarkHelper|Looper|PlayCore|AudioTrack|SurfaceUtils|cr_ChildProcessConn|FA|ActivityThread|DynamiteModule|Perf|DynamitePackage|EgretLoader|cr_LibraryLoader|BpBinder|chatty|FeatureParser|MediaCodec|ExtendedACodec|MapperHal|OMXClient|VideoCapabilities|Gralloc3|MetadataUtil|AdrenoGLES|chromium|DpmTcmClient|WebViewFactory|cr_CachingUmaRecorder|AdrenoUtils|cr_media|AudioManager|cr_SpareChildConn|Chrome_InProcGp|Choreographer|AdInternalSettings|Keep-Alive|Vary|pool-15-thread-|WifiMulticast|WifiHW|MtpService|PushClient|EGL_emulation|OpenGl*|InputReader|art|dalvik|Environment|DataRouter|AlarmManager|WindowManager|PhoneStatusBar|ActivityManager|ResourceType|PackageManager|gralloc|Gnss|NetRec|ResolverController|GAv4|AsyncOperation|AppOps|WificondControl|aofp|wifi|netmgr|ctxmgr|BestClock|FirebaseInstanceId|android.os.Debug|memtrack|netd|system_server|StrictMode|bluetooth|NetworkMonitor|FA|BroadcastQueue|ConnextivityService|WakeLock|HttpClientWrapper|RAWR|Tenor|BgTask|WifiService|BluetoothAdapter|UpdateStatsService|AppIdleHistory|Connectivity|VelvetNetworkClient|WorkerManager|EGL_emulation|chatty|gralloc|InputReader|ActivityThread|ActivityTaskManager|UsageStatsService|ocess.gservice|DropBoxManagerService|EventLogChimeraService|PContextMetricsRunner))

【讨论】:

【参考方案11】:

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

【讨论】:

好吧,我忘了提到我在命令提示符/手机内使用它来读取日志。每次我点击屏幕时,它都会显示 InputReader / InputDispatcher 消息,这些消息只是淹没了屏幕。现在我还看到将过滤器设置为“InputReader:S InputDispatcher:S”有效:) 感谢您的回答!

以上是关于如何使用 Android adb logcat 按标签名称排除某些消息?的主要内容,如果未能解决你的问题,请参考以下文章

android logcat抓取app日志

adb logcat 通过包名过滤日志并输出到txt文件

我的Android进阶之旅 adb logcat 输出同一个进程的所有输出

Android 巧用 adb logcat 工具查看丢失的 app crash 数据

Android adb Logcat 在连接某些设备时发疯

Android adb logcat输出日志显示不全解决方案