Logcat umożliwia filtrowanie dzienników, ale działa to w ten sposób: definiujesz filtry i logcat wyświetla tylko wiadomości pasujące do filtrów. Ale czy istnieje sposób na wyświetlenie wszystkich dzienników Z WYJĄTKIEM niektórych tagów zdefiniowanych przez filtry?
123
Odpowiedzi:
Jeśli używasz,
adb logcat
możesz potokować go przez grep i użyć jego odwróconego dopasowania: Ze strony podręcznika grep :Na przykład:
Możesz to rozszerzyć, używając wyrażeń regularnych .
Oto przykład takiego wyrażenia:
Ten sprawdzałby, czy wystąpiło którekolwiek z podanych, a grep nie wyświetlałby ich wtedy.
źródło
grep
to standardowe polecenie unixowe. W przypadku okien możesz spróbowaćfind /V "notshownmatchpattern"
. PS Wygląda na to, że powłoka adb ma również rozszerzeniegrep
. Ale to nie to samo, co standardowy unixgrep
!Możesz to zrobić z poziomu DDMS Monitor (a także Eclipse lub Android Studio) za pomocą pola wprowadzania wyrażeń regularnych i negatywnych asercji wyprzedzających , na przykład wykluczam wiele szumów z mojego dziennika, wykonując następujące czynności:
(„Tag:” nie jest częścią wyrażenia regularnego, ale informuje LogCat, aby zastosować wyrażenie regularne tylko do pola Tag. Jeśli użyjesz tej sztuczki w zapisanym filtrze, umieść tylko wyrażenie regularne w polu wprowadzania „Tag” i pomiń prefiks „tag:”)
W panelu monitorowania logcat w Android Studio można ustawić zapisany filtr, otwierając menu rozwijane w prawym górnym rogu (może mieć zaznaczoną opcję „Pokaż tylko wybraną aplikację”) i wybierając opcję Edytuj konfigurację filtru. Utwórz nowy filtr logcat i umieść
^(?!(WifiMulticast
... itd.))
w polu Log Tag, zRegex
zaznaczonym polem wyboru.źródło
Jeśli chcesz wykluczyć lub przefiltrować określone wiadomości według nazwy tagu w Android Studio, przejdź do okna LogCat => Edytuj konfigurację filtru i wprowadź następujące informacje w polu „by Log Tag (regex)”:
Zauważ, że nie ma spacji, to ważne
źródło
^(?!tag1)
^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$
Spowoduje to wykluczenie tekstów posiadających zawartość WindowManager, dalvik, ...
tag:^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$
Spowoduje to wykluczenie tagów WindowManager, dalvik, ... z logcat
źródło
^(?!(WifiMulticast|WifiHW|MtpService|PushClient|EGL_emulation|OpenGl*|InputReader|art|dalvik|Environment|DataRouter|AlarmManager|WindowManager|PhoneStatusBar|ActivityManager|ResourceType|PackageManager|gralloc*))
Z poziomu powłoki możesz użyć polecenia takiego jak:
który będzie zawierał wszystkie dzienniki oprócz tych z
AlarmManagerService
iPowerManagerService
tagami .(
:S
Skrót oznacza „cichy”, co oznacza, że nic nie zostanie wydrukowane dla tych tagów;:V
oznacza „gadatliwy”, co oznacza, że wszystkie inne tagi zostaną wydrukowane. Dokumentacja systemu Android dla logcat zawiera więcej szczegółów na temat innych opcji, których możesz użyć w filtry.)Możesz także użyć
ANDROID_LOG_TAGS
zmiennej środowiskowej, aby ustawić domyślne filtry, np. (W bash):źródło
S
to „cichy”. Zaktualizowałem odpowiedź, aby to wyjaśnić, tak jak sugerujesz.Połącz zarówno dodatnie, jak i ujemne wyprzedzanie, aby uzyskać skuteczniejsze filtrowanie.
Przykład:
Dołączone są etykiety w pierwszych zagnieżdżonych nawiasach.
Tagi na drugim miejscu są wykluczone.
źródło
Oto lista filtrów, których używałem do ignorowania dzienników systemowych Samsung . działałby również z innymi urządzeniami.
źródło
Prostym sposobem jest filtrowanie tylko tych tagów, które chcesz zobaczyć.
Wyświetli tylko te tagi.
źródło
W widoku Eclipse Logcat nie ma takiej opcji. Możesz jednak skorzystać z poziomu dziennika, aby wykluczyć każdą wiadomość, której poziom dziennika jest zbyt niski. Np. ustawienie go na I (nfo) nie wyświetla komunikatów D (ebug) i (V) erbose.
źródło