Narzędzie wiersza poleceń Logcat

Logcat to narzędzie wiersza poleceń, które zapisuje dziennik komunikatów systemowych: wiadomości napisane z poziomu aplikacji wraz z Log zajęcia.

Ta strona dotyczy narzędzia logcat wiersza poleceń, ale możesz też wyświetlić dziennik z okna Logcat w Android Studio. Dla: informacje o wyświetlaniu i filtrowaniu dzienników z Android Studio, Więcej informacji znajdziesz w sekcji Wyświetlanie i zapis logów przy użyciu Logcat.

Omówienie systemu logowania

System logowania w Androidzie to zbiór uporządkowanych, okrągłych buforów utrzymywanych przez system proces logd. Zbiór dostępnych buforów jest ustalony i zdefiniowany przez funkcję systemu. Najważniejsze bufory:

  • main: przechowuje większość logów aplikacji.
  • system: przechowuje wiadomości pochodzące z systemu operacyjnego Android.
  • crash: przechowuje dzienniki awarii. Każdy wpis logu ma priorytet, czyli tag, który określa źródło dziennika oraz rzeczywisty komunikat dziennika.

Podstawowym interfejsem C/C++ systemu logowania jest biblioteka współdzielona liblog a nagłówek <android/log.h>. Wszystkie narzędzia logowania w różnych językach (w tym android.util.Log) na koniec wywołaj funkcję __android_log_write Domyślnie wywołuje funkcję __android_log_logd_logger, który wysyła wpis logu do logd za pomocą gniazdka elektrycznego. Począwszy od poziomu interfejsu API 30, funkcję logowania można zmienić, wywołując __android_set_log_writer Więcej informacji znajdziesz w Dokumentacja NDK

Logi wyświetlane przez adb logcat są filtrowane na 4 poziomach:

Filtrowanie podczas kompilacji
W zależności od ustawień kompilacji niektóre logi mogą być usunięte z pliku binarnego. ProGuard można na przykład skonfigurować tak, aby usuwał wywołania Log.d w kodzie Java.
Filtrowanie właściwości systemowych
liblog wysyła zapytanie do zestawu właściwości systemowych, aby określają minimalny poziom ważności, który należy wysłać do użytkownika logd. Jeśli dzienniki zawierają tag MyApp, zostaną sprawdzone następujące właściwości i powinny zawierać pierwsza litera minimalnej wagi (V, D, I, W, E lub S, aby wyłączyć wszystkie logi):
  • log.tag.MyApp
  • persist.log.tag.MyApp
  • log.tag
  • persist.log.tag
Filtrowanie aplikacji
Jeśli nie jest ustawiona żadna z właściwości, liblog stosuje minimalny priorytet określony przez __android_log_set_minimum_priority Ustawienie domyślne to INFO
Filtrowanie wyświetlania
adb logcat obsługuje dodatkowe filtry, które mogą ograniczyć liczbę wyświetlanych logów z okresu logd. Zapoznaj się z sekcją na temat filtrowanie wyników dziennika, by uzyskać więcej informacji.

Składnia wiersza poleceń

Ogólne zastosowanie polecenia logcat w powłoce adb to:

[adb] shell logcat [<option>] ... [<filter-spec>] ...

Występuje też skrót adb logcat, który dotyczy tylko słowa adb shell logcat

Opcje

logcat oferuje wiele opcji. Dostępne opcje zależą od systemu operacyjnego wersji używanego urządzenia. Aby uzyskać pomoc dotyczącą usługi logcat dostosowaną do urządzenia, którego używasz, wykonaj:

    adb logcat --help
    

Pamiętaj, że logcat jest narzędziem dla deweloperów systemów operacyjnych i aplikacji (deweloperzy aplikacji powinni używać Android Studio) wiele z tych opcji jest do wykorzystania jako root.

Filtruj wyniki dziennika

Tag komunikatu logu to krótki ciąg znaków wskazujący komponent systemu, w którym Na przykład „Widok”. dla systemu widoków.

Priorytet to jedna z tych wartości znaków, posortowana od najniższego do najwyższego priorytet:

    • V: szczegółowy (najniższy priorytet)
    • D: debugowanie
    • I: informacje
    • W: ostrzeżenie
    • E: błąd
    • F: błąd krytyczny
    • S: bez dźwięku (najwyższy priorytet – nic nigdy nie jest wydrukowane)
  • Aby uzyskać listę tagów używanych w systemie z priorytetami, uruchom polecenie logcat i sprawdź 2 pierwsze kolumny każdej wiadomości, podane jako <priority>/<tag>

    Oto przykład krótkich danych wyjściowych logcat uzyskanych za pomocą funkcji logcat -v brief output. Dane wyjściowe wskazują, że komunikat dotyczy priorytet „I” i oznaczyć tagiem „ActivityManager”:

    I/ActivityManager(  585): Starting activity: Intent { action=android.intent.action...}
    

    Aby zmniejszyć ilość danych wyjściowych logów, ogranicz dane wyjściowe logów za pomocą filtra . Wyrażenia filtra umożliwiają wskazanie systemowi priorytetu tagów które Cię interesują. System ukrywa inne wiadomości dla określonych tagów.

    Wyrażenie filtra ma format tag:priority ..., gdzie tag wskazuje tag zainteresowania, a priority wskazuje minimalny poziom priorytet raportowania dla tego tagu. Wiadomości z tym tagiem o określonym lub wyższym priorytecie są zapisane w dzienniku. Podaj dowolną liczbę specyfikacji tag:priority w jako wyrażenia filtra. Seria specyfikacji jest rozdzielana spacjami.

    Poniżej znajdziesz przykład wyrażenia filtra, które pomija wszystkie komunikaty logu oprócz z tagiem „ActivityManager” z priorytetem „Informacje” lub wyższym i tych z tagiem, „MojaAplikacja” z priorytetem „Debugowanie” lub więcej:

    adb logcat ActivityManager:I MyApp:D *:S
    

    Ostatni element w poprzednim wyrażeniu, *:S, ustawia poziom priorytetu dla argumentu wszystkie tagi są wyciszone, co zapewnia, że rejestrowane są tylko wiadomości z obiektem „ActivityManager” i „MojaAplikacja” to wyświetlenie. Użycie metody *:S pozwala mieć pewność, że dane wyjściowe logów będą ograniczone do do określonych przez Ciebie filtrów. *:S umożliwia stosowanie filtrów jako lista dozwolonych danych wyjściowych logów.

    Uwaga: w niektórych powłokach element „*” jest zarezerwowany przez powłokę. Jeśli używasz takiej powłoki, umieść wyrażenie filtra w cudzysłowie: adb logcat "ActivityManager:I MyApp:D *:S"

    To wyrażenie filtra wyświetla wszystkie komunikaty logu z priorytetem „warning” oraz wyższa we wszystkich tagach:

    adb logcat *:W
    

    Jeśli aplikacja logcat jest uruchomiona na komputerze programistycznym, a nie na zdalną adb, możesz też ustawić domyślne wyrażenie filtra, eksportując wartość atrybutu zmienna środowiskowa ANDROID_LOG_TAGS:

    export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
    

    Filtr ANDROID_LOG_TAGS nie jest eksportowany do emulatora/urządzenia jeśli uruchamiasz logcat ze zdalnej powłoki lub używasz adb shell logcat.

    Format wyjściowy dziennika kontrolnego

    Oprócz tagu i priorytetu wiadomości logu zawierają wiele pól metadanych. Dostępne opcje zmodyfikować format wyjściowy wiadomości, tak aby wyświetlały określone pole metadanych. Aby to zrobić: użyj opcji -v i określ jeden z tych obsługiwanych formatów wyjściowych:

    • brief: wyświetla priorytet, tag i PID procesu, który .
    • long: wyświetla wszystkie pola metadanych i rozdziela wiadomości puste .
    • process: wyświetla tylko identyfikator PID.
    • raw: wyświetla nieprzetworzony komunikat logu bez innych pól metadanych.
    • tag: wyświetla tylko priorytet i tag.
    • thread: Starszy format, który pokazuje priorytet, PID i TID obiektu w wątku publikującym wiadomość.
    • threadtime (domyślnie): wyświetla datę, czas wywołania, priorytet, tagu, PID i TID wątku, który wysłał wiadomość.
    • time: wyświetla datę, czas wywołania, priorytet, tag i identyfikator PID procesu wysyłania wiadomości.

    Uruchamiając polecenie logcat, określ format wyjściowy za pomocą funkcji Opcja -v:

    [adb] logcat [-v <format>]
    

    Ten przykład pokazuje, jak generować wiadomości w danych wyjściowych thread format:

    adb logcat -v thread
    

    Za pomocą opcji -v możesz określić tylko jeden format wyjściowy. Musisz jednak możesz określić dowolną liczbę modyfikatorów, o ile mają sens. logcat ignoruje modyfikatory, które nie mają sensu.

    Modyfikatory formatu

    Modyfikatory formatu zmieniają dane wyjściowe funkcji logcat. Aby określić modyfikator formatu, użyj opcji -v w ten sposób:

    adb logcat -b all -v color -d
    

    Z każdą wiadomością z dziennika Androida jest powiązany tag i priorytet. Dowolny modyfikator formatu możesz połączyć z jedną z tych opcji formatowania:

    • brief
    • long
    • process
    • raw
    • tag
    • thread
    • threadtime
    • time

    Aby sformatować następujące szczegóły modyfikatora, wpisz logcat -v --help w wiersz poleceń:

    • color: każdy poziom priorytetu ma inny kolor.
    • descriptive: pokazuje opisy zdarzeń w buforze dziennika. Ten modyfikator wpływa na zdarzenie tylko wiadomości buforów dziennika i nie ma to wpływu na inne bufory niebinarne. Wydarzenie pochodzą z bazy danych tagów dzienników zdarzeń.
    • epoch: wyświetla czas w sekundach od 1 stycznia 1970 r.
    • monotonic: wyświetla czas w sekundach procesora od ostatniego uruchomienia.
    • printable: zapewnia zmianę znaczenia każdej treści logowania binarnego.
    • uid: jeśli pozwala na to kontrola dostępu, wyświetla identyfikator UID lub identyfikator Androida zapisany proces.
    • usec: wyświetla godzinę z dokładnością do mikrosekund.
    • UTC: wyświetla godzinę w strefie czasowej UTC.
    • year: dodaje rok do wyświetlanego czasu.
    • zone: dodaje lokalną strefę czasową do wyświetlanego czasu.

    Wyświetl alternatywne bufory logu

    System logowania Androida przechowuje wiele cyklicznych buforów na potrzeby komunikatów dziennika, a nie wszystkie są wysyłane do domyślnego bufora cyklicznego. Aby wyświetlić dodatkowe komunikaty logu, uruchom polecenie logcat z opcją -b, aby poprosić o wyświetlenie naprzemienny bufor kołowy. Możesz wyświetlić dowolny z tych alternatywnych buforów:

    • radio: wyświetla bufor zawierający połączenie radio/telekomunikacyjne. wiadomości.
    • events: wyświetla zinterpretowane komunikaty bufora zdarzeń systemu binarnego.
    • main: wyświetla główny bufor dziennika (domyślnie), który nie zawiera komunikatów systemowych i dzienników awarii.
    • system: wyświetla bufor logu systemowego (domyślnie).
    • crash: wyświetla bufor dziennika awarii (domyślnie).
    • all: wyświetla wszystkie bufory.
    • default: raporty main, system i Bufory: crash.

    Zastosowanie opcji -b:

    [adb] logcat [-b <buffer>]
    

    Oto przykład, jak wyświetlić bufor dziennika zawierający wiadomości radiowe i telefoniczne:

    adb logcat -b radio
    

    Aby określić wiele flag -b dla wszystkich buforów, które chcesz wydrukować, wpisz:

    logcat -b main -b radio -b events
    

    Określ pojedynczą flagę -b z listą buforów rozdzielonych przecinkami. np.:

    logcat -b main,radio,events
    

    Zapisz z kodu

    Zajęcia Log umożliwiają tworzenie wpisy logu w kodzie, które są wyświetlane w narzędziu logcat. Typowe metody rejestrowania:

    Możesz na przykład użyć tego wywołania:

    Kotlin

    Log.i("MyActivity", "MyClass.getView() — get item number $position")
    

    Java

    Log.i("MyActivity", "MyClass.getView() — get item number " + position);
    

    logcat zwraca wynik podobny do tego:

    I/MyActivity( 1557): MyClass.getView() — get item number 1