Wie kann ich bestimmte Nachrichten nach TAG-Namen mit Android adb logcat ausschließen?


122

Logcat ermöglicht das Filtern von Protokollen, funktioniert jedoch folgendermaßen: Sie definieren Filter und logcat zeigt nur Nachrichten an, die mit Filtern übereinstimmen. Aber gibt es eine Möglichkeit, alle Protokolle mit Ausnahme einiger durch Filter definierter TAGs anzuzeigen?


Antworten:


51

Wenn Sie verwenden, können adb logcatSie es durch grep leiten und es invertiert verwenden: Von der grep-Manpage :

v, --invert-match Invertiert den Übereinstimmungssinn, um nicht übereinstimmende Linien auszuwählen.

Beispielsweise:

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

Sie können dies erweitern, indem Sie reguläre Ausdrücke verwenden .

Hier ist ein Beispiel für einen solchen Ausdruck:

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

Dieser würde prüfen, ob eines der angegebenen Ereignisse eintritt, grep würde sie dann nicht auflisten.


1
@zest grepist ein Standard-Unix-Befehl. Für Windows können Sie versuchen find /V "notshownmatchpattern". PS Anscheinend hat die ADB-Shell auch eine grep. Aber es ist nicht dasselbe wie das Standard-Unix grep!
PCoder

Ja, ich habe es bereits gefunden, findstr - saugen, möglich, Powershell oder Grep zu installieren (für Windows :), genau wie Linux, wie in Readme geschrieben, aber nicht so sehr in der Praxis)
Gennadiy Ryabkin

Keine Adays, ich würde nur empfehlen, dass Windows Git mit Git-Befehlszeilentools installiert. Dies würde alle grundlegenden Unix-Befehlszeilentools für windowze installieren.
Chris Polzer

oder installiere clink für gängige Unix-Kommandozeilen-Tools auf windowze
chris polzer

@PCoder können Sie bitte den gesamten Befehl schreiben, um dasselbe mit Windows CMD zu tun?
Raghav Satyadev

217

Sie können dies in DDMS Monitor (und auch in Eclipse oder Android Studio) mit dem Eingabefeld für reguläre Ausdrücke und negativen Vorausschau-Aussagen tun. Beispielsweise schließe ich viel Rauschen aus meinem Protokoll aus, und zwar mit den folgenden Angaben :

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

(Das "Tag:" ist nicht Teil des regulären Ausdrucks, weist LogCat jedoch an, nur den regulären Ausdruck auf das Tag-Feld anzuwenden. Wenn Sie diesen Trick in einem gespeicherten Filter verwenden, geben Sie nur den regulären Ausdruck in das Eingabefeld "Tag" ein und lassen Sie das Präfix "tag:" weg)

Im Logcat-Monitorbereich von Android Studio können Sie einen gespeicherten Filter dafür einrichten, indem Sie das Dropdown-Menü oben rechts öffnen (möglicherweise ist "Nur ausgewählte Anwendung anzeigen" ausgewählt) und Filterkonfiguration bearbeiten auswählen. Erstellen Sie einen neuen Logcat-Filter und setzen Sie ^(?!(WifiMulticast... etc. ))im Feld Log Tag mit Regexaktiviertem Kontrollkästchen.


Gute Lösung für Eclipse LogCat
Seraphim

6
Meine Sicht ist sofort weniger verschwommen! : D
suomi35

Dies ist, was ich für eine ganze Weile suche
ar-g

Arbeitete wie Charme! Danke vielmals. Fügen Sie auch das Wort "dalvikvm" hinzu. Es ist am ärgerlichsten in Logcat.
Atul

1
Die Antwort mit Logcat-Filterung ist die richtige - stackoverflow.com/a/17468665/828237
kwesolowski

74

Wenn Sie bestimmte Nachrichten in Android Studio nach Tag-Namen ausschließen oder filtern möchten, rufen Sie das LogCat-Fenster => Filterkonfiguration bearbeiten auf und geben Sie unter "Nach Log-Tag (regulärer Ausdruck)" Folgendes ein: "

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

Beachten Sie, dass keine Leerzeichen vorhanden sind. Dies ist wichtig


Diese Antwort funktioniert in Intellij 15s Logcat> Filterkonfiguration bearbeiten, wodurch ein Modal mit dem Titel "Neuen Logcat-Filter erstellen" angezeigt wird.
Petey

1
Danke dir. Übrigens haben Lenovo Telefone viele Spam-Protokollnachrichten
Seagull

Dies verhindert jedoch nur, dass Protokolle mit diesem Tag in das Protokoll gerendert werden. Der Monitor wird immer noch mit diesen Aufrufen im Hintergrund überfüllt und schiebt die Nicht-Aufrufe "tag1 | tag2 | etc" aus dem Puffer. Gibt es einen Weg, das zu umgehen?
TheBestBigAl

Die Antwort mit Logcat-Filterung ist die richtige - stackoverflow.com/a/17468665/828237
kwesolowski

Oder wenn ein Tag^(?!tag1)
Vlad

34

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

Dies schließt Texte mit Inhalten aus WindowManager, dalvik, ...

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

Dadurch werden die Tags WindowManager, dalvik, ... von logcat ausgeschlossen


Noch mehr:^(?!(WifiMulticast|WifiHW|MtpService|PushClient|EGL_emulation|OpenGl*|InputReader|art|dalvik|Environment|DataRouter|AlarmManager|WindowManager|PhoneStatusBar|ActivityManager|ResourceType|PackageManager|gralloc*))
Gurupad Mamadapur

Und mehr: (Gnss | NetRec | ResolverController | GAv4 | AsyncOperation | AppOps | WificondControl | aofp | wifi | netmgr | ctxmgr | BestClock | FirebaseInstanceId | android.os.Debug | memtrack | netd | system_server | StrictMode | BroadcastQueue | ConnextivityService | WakeLock | HttpClientWrapper | RAWR | Tenor | BgTask | WifiService | BluetoothAdapter | UpdateStatsService | AppIdleHistory | Konnektivität | VelvetNetworkClient | WorkerManager | EGL_emulation | chatty | gralloc | PContextMetricsRunner))
Graeme

32

In der Shell können Sie einen Befehl wie den folgenden verwenden:

adb logcat AlarmManagerService:S PowerManagerService:S *:V

Dies schließt alle Protokolle außer denen mit den Tags AlarmManagerServiceund ein PowerManagerService.

(Die :SStände stehen für "stumm", was bedeutet, dass für diese Tags nichts gedruckt wird. Die :VStände für "ausführlich" bedeuten, dass für alle anderen Tags alles gedruckt wird. In der Android-Dokumentation für logcat finden Sie weitere Details zu anderen Optionen, die Sie verwenden können die Filter.)

Sie können auch die ANDROID_LOG_TAGSUmgebungsvariable verwenden, um Standardfilter einzurichten, z. B. (in Bash):

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

Dies ist ein guter Vorschlag und funktioniert über die Befehlszeile ohne Pipelines. Sie sollten Ihre Antwort imho aktualisieren, um zu erklären, dass der Teil ": S" nur schwerwiegende Nachrichten für die genannten Komponenten ausgibt (was kaum jemals vorkommt). Wieder eine gute Antwort. Die Leute sollten diesen abstimmen ...
Chris Markle

1
@ ChrisMarkle Laut den Dokumenten Sist das für "still". Ich habe die Antwort aktualisiert, um dies zu erklären, wie Sie vorschlagen.
Rich

2
Sie können die Logcat-Ausgabe auf dieselbe Weise mit der Umgebungsvariablen ANDROID_LOG_TAGS filtern. Ich finde es nützlich, dass es immer so eingestellt ist, dass einige der spammigeren Prozesse ausgeschlossen werden.
Emidander

16

Kombinieren Sie sowohl positiven als auch negativen Lookahead für eine leistungsstärkere Filterung.

Beispiel:

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

Tags in den ersten verschachtelten Klammern sind enthalten.

Tags in der Sekunde sind ausgeschlossen.


IMHO, Dies ist eine umfassendere Methode zum Filtern von Protokollen.
Ritesh Gune

4

Hier ist eine Liste von Filtern, mit denen ich Samsung- Systemprotokolle ignoriert habe . würde auch mit anderen Geräten funktionieren.

Logcat -> Filterkonfiguration bearbeiten -> Log-Tag

^(?!(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

Eine einfache Möglichkeit, dies zu tun, besteht darin, nur die Tags zu filtern, die Sie sehen möchten.

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

Ruft nur diese Tags auf.


0

In der Eclipse Logcat-Ansicht gibt es keine solche Option. Sie können jedoch die Protokollebene verwenden, um Nachrichten auszuschließen, deren Protokollebene zu niedrig ist. Z.B. Wenn Sie es auf I (nfo) setzen, werden keine D (ebug) - und (V) erbose-Nachrichten angezeigt.


Nun, ich habe vergessen zu erwähnen, dass ich das an der Eingabeaufforderung / in einem Telefon verwende, um Protokolle zu lesen. Und jedes Mal, wenn ich auf einen Bildschirm tippe, werden InputReader / InputDispatcher-Meldungen angezeigt, die gerade den Bildschirm überfluten. Jetzt sehe ich auch das Setzen von Filtern auf "InputReader: S InputDispatcher: S" funktioniert :) Danke für eine Antwort!
Kostas
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.