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


Answers:


51

如果您正在使用adb logcat,则可以通过grep传递它,并使用它的反向匹配:从grep手册页

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

例如:

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

您可以使用正则表达式进行扩展。

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

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

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


1
@zest grep是标准的Unix命令。对于Windows,您可以尝试find /V "notshownmatchpattern"。PS显然,adb shell也有一个grep。但这与标准的unix不同grep
PCoder 2013年

是的,我已经找到它了,findstr-很烂,可以安装powershell或grep(对于Windows :),与自述文件中写的Linux相同,但实际上没有那么多)
Gennadiy Ryabkin 2013年

每天都没有,我只是让Windows用git命令行工具安装git。这将为windowze安装所有基本的unix命令行工具。
克里斯·波尔泽

或在windowze上为通用的unix命令行工具安装clink
chris polzer 2015年

@PCoder能否请您编写用于在Windows CMD中执行相同操作的整个命令?
Raghav Satyadev

217

您可以在DDMS Monitor(以及Eclipse或Android Studio)中使用正则表达式输入框和否定的前瞻性断言来执行此操作,例如,通过以下操作,我从日志中排除了很多噪音:

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

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

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


Eclipse LogCat的良好解决方案
塞拉芬

6
我的视线立刻变得越来越模糊!:D
suomi35

这就是我要找的相当长的一段
AR-G

像魅力一样工作!非常感谢。还在其中添加单词“ dalvikvm”。在logcat中最令人讨厌。
Atul 2016年

1
与logcat的过滤答案是正确的一个- stackoverflow.com/a/17468665/828237
kwesolowski

74

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

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

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


这个答案在intellij 15的logcat> Edit Filter Configuration中起作用,它弹出一个名为“ Create New Logcat Filter”的模式。
petey '16

1
谢谢。顺便说一句,联想手机有很多垃圾日志消息
Seagull

但是,这只能防止将带有该标签的日志呈现到日志中。Monitor在后台仍然被这些调用淹没,并且将非“ tag1 | tag2 | etc”调用推出缓冲区。有办法解决吗?
TheBestBigAl

与logcat的过滤答案是正确的一个- stackoverflow.com/a/17468665/828237
kwesolowski

或者,如果有一个标签^(?!tag1)
Vlad19,19年

34

^(?!.*(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*))
Gurupad Mamadapur,

以及更多:(Gnss | NetRec | ResolverController | GAv4 | AsyncOperation | AppOps | WificondControl | aofp | wifi | netmgr | ctxmgr | BestClock | FirebaseInstanceId | android.os.Debug | memtrack | netd | 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 | UsageStatsServiceService | Ocess PContextMetricsRunner))
Graeme

32

在外壳程序中,您可以使用类似以下的命令:

adb logcat AlarmManagerService:S PowerManagerService:S *:V

其中将包含除带有AlarmManagerServicePowerManagerService标签的日志以外的所有日志。

:S“ silent”的意思是,这些标签不会打印任何内容;:V“ verbose”的意思是,所有其他标签都会打印所有内容。logcatAndroid文档提供了您可以在其中使用的其他选项的更多详细信息过滤器。)

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

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

这是一个很好的建议,可以在没有管道的命令行中使用。您应该更新答案恕我直言,以解释“:S”部分将仅针对命名的组件发出严重消息(几乎不会发生)。同样,好的答案。人们应该投票赞成这个……
克里斯·马克

1
@ChrisMarkle根据文档,这S是“沉默的”。正如您所建议的,我已经更新了答案以对此进行解释。
Rich

2
您可以使用环境变量ANDROID_LOG_TAGS以相同的方式过滤logcat输出。我发现始终将其设置为排除一些垃圾邮件程序很有用。
emidander 2014年

16

结合使用正向和负向前瞻功能进行更强大的过滤。

例:

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

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

排除第二个标签。


恕我直言,这是一种更全面的日志过滤方式。
Ritesh Gune '17

4

这是我用来忽略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|SSRM|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))

1

一种简单的方法是仅过滤您要查看的标签。

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

将只显示那些标签。


0

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


好吧,我忘了提到我在电话内的命令提示符下使用它来读取日志。而且,每次我点击屏幕时,它都会显示InputReader / InputDispatcher消息,这些消息只会泛滥整个屏幕。现在,我还看到将过滤器设置为“ InputReader:S InputDispatcher:S”的工作原理:)感谢您的回答!
Kostas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.