Logcat ist ein Befehlszeilentool, das ein Log mit Systemmeldungen ausgibt,
Nachrichten, die Sie aus Ihrer App mit dem
Klasse Log
.
Auf dieser Seite geht es um das logcat
-Befehlszeilentool. Sie können sich aber auch Logs ansehen.
im Fenster Logcat in Android Studio angezeigt. Für
Informationen zum Anzeigen und Filtern von Protokollen aus Android Studio,
Siehe Logs ansehen und schreiben mit
Logcat
Logging-Systemübersicht
Das Android-Protokollierungssystem besteht aus einer Reihe strukturierter kreisförmiger Puffer, die vom System verwaltet werden.
Prozess logd
. Die Menge der verfügbaren Puffer wird festgelegt und vom
System. Die wichtigsten Puffer sind:
main
: Speichert die meisten Anwendungslogs.system
: Speichert Nachrichten, die aus dem Android-Betriebssystem stammen.-
crash
: Speichert Absturzprotokolle. Jeder Logeintrag hat eine Priorität, ein Tag, das den Ursprung des Protokolls und die eigentliche Lognachricht.
Die primäre C/C++-Schnittstelle zum Logging-System ist die gemeinsam genutzte Bibliothek liblog
und der Header <android/log.h>
.
Alle sprachspezifischen Logging-Funktionen
(einschließlich android.util.Log
)
schließlich die Funktion aufrufen,
__android_log_write
. Standardmäßig wird die Funktion
__android_log_logd_logger
zum Senden des Logeintrags an logd
mit einem Socket. Ab API-Level 30 kann die Logging-Funktion durch folgenden Aufruf geändert werden:
__android_set_log_writer
Weitere Informationen finden Sie in der
NDK-Dokumentation
Die von adb logcat
angezeigten Logs werden auf vier Arten gefiltert:
- Filterung nach Kompilierungszeit
- Je nach Kompilierungseinstellungen können einige Logs
aus dem Binärprogramm entfernt. ProGuard kann beispielsweise so konfiguriert werden, dass Aufrufe an
Log.d
aus dem Java-Code. - Filterung nach Systemeigenschaften
liblog
fragt eine Reihe von Systemeigenschaften ab, um Bestimmen Sie den minimalen Schweregrad, der anlogd
gesendet werden soll. Wenn Ihre Logs das TagMyApp
enthält, wurden die folgenden Eigenschaften geprüft. Diese sollten folgende Eigenschaften enthalten: der erste Buchstabe des Mindestschweregrads (V
,D
,I
,W
,E
oderS
, um alle Logs zu deaktivieren):log.tag.MyApp
persist.log.tag.MyApp
log.tag
persist.log.tag
- Anwendungsfilter
- Wenn keines der Attribute festgelegt ist, verwendet
liblog
die durch__android_log_set_minimum_priority
Die Standardeinstellung istINFO
- Displayfilter
adb logcat
unterstützt zusätzliche Filter, die die Die Anzahl der ablogd
angezeigten Logs. Weitere Informationen finden Sie im Abschnitt zu Filterung der Logausgabe.
Befehlszeilensyntax
Im Allgemeinen wird Folgendes verwendet, um logcat
über die adb
-Shell auszuführen:
[adb] shell logcat [<option>] ... [<filter-spec>] ...
Es gibt auch eine Abkürzung für adb logcat
, aber das wird einfach zu
adb shell logcat
.
Optionen
logcat
hat viele Möglichkeiten. Welche Optionen verfügbar sind, hängt vom Betriebssystem ab.
Version des verwendeten Geräts. Hilfe zu logcat
für den
auf Ihrem Gerät ausgeführt haben, führen Sie folgenden Befehl aus:
adb logcat --help
Hinweis: logcat
ist ein Tool für Betriebssystem- und App-Entwickler.
App-Entwickler, die stattdessen Android Studio verwenden, sind viele der Optionen nur
nutzbar als root
.
Logausgabe filtern
Das Tag einer Protokollmeldung ist ein kurzer String, der die Systemkomponente angibt, in der Nachricht entsteht. Beispiel: „Ansehen“ für das View-System.
Die Priorität ist einer der folgenden Zeichenwerte, geordnet vom niedrigsten zum höchsten Wert Priorität:
V
: Ausführlich (niedrigste Priorität)D
: FehlerbehebungI
: InformationenW
: WarnungE
: FehlerF
: SchwerwiegendS
: Lautlos (höchste Priorität, wenn nichts gedruckt wird)
Führen Sie den folgenden Befehl aus, um eine Liste der im System verwendeten Tags mit Prioritäten zu erhalten:
logcat
und beobachten die ersten beiden Spalten jeder Nachricht, angegeben als
<priority>/<tag>
.
Das folgende Beispiel zeigt eine kurze logcat
-Ausgabe, die mit dem
logcat -v brief output
-Befehl. Die Ausgabe zeigt, dass sich die Nachricht auf
Prioritätsstufe „I“ und tag "ActivityManager":
I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...}
Um die Logausgabe auf eine überschaubare Ebene zu reduzieren, beschränken Sie die Logausgabe mithilfe von filter Ausdrücke Mithilfe von Filterausdrücken können Sie dem System die Tag-Priorität die für Sie interessant sind. Das System unterdrückt andere Meldungen für die angegebenen Tags.
Ein Filterausdruck folgt dem Format tag:priority ...
, wobei tag
das Tag von Interesse und priority
das Minimum an
Priorität für den Bericht zu diesem Tag. Nachrichten für dieses Tag mit oder über der angegebenen Priorität werden
in das Log geschrieben. Geben Sie beliebig viele tag:priority
-Spezifikationen in einem
einzelnen Filterausdruck. Die Reihe der Spezifikationen ist durch Leerzeichen getrennt.
Im Folgenden finden Sie ein Beispiel für einen Filterausdruck, der alle Logeinträge unterdrückt, außer diejenigen mit dem Tag "ActivityManager" mit Priorität „Info“ oder höher und die mit dem Tag „MeineApp“ mit der Priorität „Debug“ oder höher:
adb logcat ActivityManager:I MyApp:D *:S
Das letzte Element im vorherigen Ausdruck, *:S
, legt die Prioritätsstufe für
alle Tags auf „silent“, wodurch nur Meldungen mit „ActivityManager“ protokolliert werden und „MeineApp“ sind
angezeigt. Mit *:S
wird sichergestellt, dass die Logausgabe auf
die explizit angegebenen Filter. Mit *:S
können Ihre Filter als
Zulassungsliste für die Logausgabe.
Hinweis: In einigen Shells wird der "*
" ist von der Shell reserviert. Wenn Sie
eine solche Shell verwenden, setzen Sie den Filterausdruck in Anführungszeichen: adb logcat
"ActivityManager:I MyApp:D *:S"
Mit dem folgenden Filterausdruck werden alle Logeinträge mit der Prioritätsstufe „warning“ angezeigt und weiter oben für alle Tags:
adb logcat *:W
Wenn Sie logcat
auf Ihrem Entwicklungscomputer statt auf einem
Remote-adb
-Shell können Sie auch einen Standardfilterausdruck festlegen, indem Sie einen Wert für die
Umgebungsvariable ANDROID_LOG_TAGS
:
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
Der Filter „ANDROID_LOG_TAGS
“ wurde nicht in den Emulator/das Gerät exportiert
wenn Sie logcat
über eine Remote-Shell ausführen oder adb shell
logcat
verwenden.
Ausgabeformat der Kontrolllogs
Logmeldungen enthalten neben dem Tag und der Priorität eine Reihe von Metadatenfeldern. Sie können
Ausgabeformat für Nachrichten so ändern, dass ein bestimmtes Metadatenfeld angezeigt wird Gehen Sie dazu wie folgt vor:
Verwenden Sie die Option -v
und geben Sie eines der folgenden unterstützten Ausgabeformate an:
brief
: Zeigt Priorität, Tag und PID des Prozesses an, der den angezeigt.long
: Zeigt alle Metadatenfelder an und trennt einzelne Nachrichten ohne Leerzeichen Linien.process
: Zeigt nur die PID an.raw
: Zeigt die Rohlognachricht ohne weitere Metadatenfelder an.tag
: Nur die Priorität und das Tag werden angezeigt.thread:
Ein Legacy-Format, bei dem die Priorität, die PID und die TID des Thread, von dem die Nachricht stammt.threadtime
(Standardeinstellung): Zeigt Datum, Aufrufzeit, Priorität Tag, PID und TID des Threads, von dem die Nachricht stammt.time
: Zeigt das Datum, die Aufrufzeit, die Priorität, das Tag und die PID des von dem die Nachricht ausgegeben wird.
Wenn Sie logcat
starten, geben Sie das gewünschte Ausgabeformat mithilfe der Methode
Option -v
:
[adb] logcat [-v <format>]
Das folgende Beispiel zeigt, wie Nachrichten in der thread
-Ausgabe generiert werden.
Format:
adb logcat -v thread
Mit der Option -v
können Sie nur ein Ausgabeformat angeben. Sie haben jedoch
beliebig viele Modifikatoren angeben, sofern sie sinnvoll sind. logcat
werden irrelevante Modifikatoren ignoriert.
Formatmodifikatoren
Formatmodifikatoren ändern die logcat
-Ausgabe. Um einen Formatmodifikator anzugeben,
verwenden Sie die Option -v
so:
adb logcat -b all -v color -d
Jede Android-Lognachricht hat ein Tag und eine Priorität. Sie können einen beliebigen Formatmodifikator mit einer der folgenden Formatoptionen kombinieren:
brief
long
process
raw
tag
thread
threadtime
time
Um die folgenden Modifikatordetails zu formatieren, geben Sie logcat -v --help
unter
der Befehlszeile:
color
: Zeigt jede Prioritätsstufe in einer anderen Farbe an.descriptive
: Zeigt Beschreibungen der Ereignisse des Protokollzwischenspeichers an. Dieser Modifikator wirkt sich auf das Ereignis aus Protokollzwischenspeichermeldungen und hat keine Auswirkungen auf die anderen nicht binären Zwischenspeicher. Das Ereignis Beschreibungen stammen aus der event-log-tags-Datenbank.epoch
: Zeigt die Zeit in Sekunden ab dem 1. Januar 1970 an.monotonic
: Zeigt die Zeit in CPU-Sekunden ab dem letzten Start an.printable
: Sorgt dafür, dass alle binären Logging-Inhalte maskiert werden.uid
: Wenn dies durch die Zugriffssteuerung erlaubt ist, wird die UID oder Android-ID des protokollierten Prozess.usec
: Zeigt die Zeit genau in Mikrosekunden an.UTC
: zeigt die Zeit als UTC an.year
: Fügt das Jahr zur angezeigten Zeit hinzu.zone
: Fügt die lokale Zeitzone zur angezeigten Zeit hinzu.
Alternative Protokollzwischenspeicher ansehen
Das Android-Protokollierungssystem speichert mehrere kreisförmige Zwischenspeicher für Protokollmeldungen.
-Protokollmeldungen werden an den kreisförmigen Standardpuffer gesendet. Um zusätzliche Logeinträge anzuzeigen,
Führen Sie den Befehl logcat
mit der Option -b
aus, um das Aufrufen eines
wechselnden kreisförmigen Puffer. Sie können sich die folgenden alternativen Zwischenspeicher ansehen:
radio
: Zeigt den Zwischenspeicher an, der Funk- und Telefoniefunktionen enthält Nachrichten.events
: Betrachtet die interpretierten Zwischenspeichernachrichten des binären Systems.main
: Zeigt den Hauptprotokollzwischenspeicher an (Standardeinstellung). Dieser enthält keine Elemente. System- und Absturzprotokollmeldungen.system
: Zeigt den Systemprotokollzwischenspeicher an (Standardeinstellung).crash
: Zeigt den Zwischenspeicher für Absturzprotokolle an (Standardeinstellung).all
: alle Zwischenspeicher werden angesehen.default
: Berichtemain
,system
undcrash
Zwischenspeicher.
Die Verwendung der Option -b
sieht so aus:
[adb] logcat [-b <buffer>]
Hier ist ein Beispiel für das Aufrufen eines Protokollzwischenspeichers, der Funk- und Telefonienachrichten enthält:
adb logcat -b radio
So geben Sie mehrere -b
-Flags für alle Zwischenspeicher an, die Sie ausgeben möchten:
geben Sie Folgendes ein:
logcat -b main -b radio -b events
Geben Sie ein einzelnes -b
-Flag mit einer durch Kommas getrennten Liste von Puffern an.
Beispiel:
logcat -b main,radio,events
Aus Code protokollieren
Mit der Klasse Log
können Sie
Logeinträge in Ihrem Code, die im logcat
-Tool angezeigt werden. Zu den gängigen Protokollierungsmethoden gehören:
Log.v(String, String)
(ausführlich)Log.d(String, String)
(zur Fehlerbehebung)Log.i(String, String)
(Informationen)Log.w(String, String)
(Warnung)Log.e(String, String)
(Fehler)
Verwenden Sie beispielsweise den folgenden Aufruf:
Kotlin
Log.i("MyActivity", "MyClass.getView() — get item number $position")
Java
Log.i("MyActivity", "MyClass.getView() — get item number " + position);
Die Ausgabe von logcat
sieht in etwa so aus:
I/MyActivity( 1557): MyClass.getView() — get item number 1