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?

Kostas
quelle
1
In Verbindung stehender Beitrag - Wie kann ich Log Tag in logcat Android Studio ausschließen?
RBT

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.

Chris Polzer
quelle
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.

ZoFreX
quelle
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

Phileo99
quelle
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

Rino
quelle
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"
Reich
quelle
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.

Bäcker
quelle
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))
Ramesh Jaya
quelle
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.

Wintermute
quelle
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.

Lars Blumberg
quelle
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