Logcat er et kommandolinjeværktøj, der dumper en log af systemmeddelelser, herunder stakspor, når thedevice kaster en fejl og meddelelser, som du har skrevet fra din app medLog
klasse.
denne side handler om kommandolinjens logcat-værktøj, men du kan også se logmessages fra Logcat-vinduet i Android Studio. For oplysninger om visning og filtrering af logfiler fra Android Studio,se Skriv og se logfiler medlogcat.
Logging System oversigt
Android logging system er et sæt strukturerede cirkulære buffere vedligeholdt af systemprocessenlogd
. Sættet af tilgængelige buffere er fast og defineret af systemet. De mest relevante er: main
, som gemmer de fleste applikationslogger, system
, som gemmer meddelelser, der stammer fra Android OS, og crash
, som gemmer crashlogs. Hver logindgang har en prioritet (en af VERBOSE
DEBUG
INFO
WARNING
ERROR
eller FATAL
), et tag, der identificerer logens oprindelse og den faktiske logmeddelelse.
den primære grænseflade til logsystemet er det delte bibliotek liblog
og dens overskrift <android/log.h>
. Alle Sprogspecifikke logningsfaciliteter kalder til sidst funktionen __android_log_write
. Som standard kalder den Funktionen __android_log_logd_logger
, som sender logposten til logd
ved hjælp af en stikkontakt. Startende med API-niveau 30 kan logningsfunktionen ændres ved at kalde __android_set_log_writer
. Flere oplysninger findes i NDK-dokumentationen.
logfiler, der vises afadb logcat
gennemgå fire niveauer af filtrering:
- Kompileringstidsfiltrering: afhængigt af kompileringsindstillingerne kan nogle logfiler fjernes fuldstændigt fra det binære. For eksempel kan Proguard konfigureres til at fjerne opkald til
Log.d
fra Java-kode. - systemegenskabsfiltrering:
liblog
forespørger et sæt Systemegenskaber for at bestemme det mindste sværhedsgrad, der skal sendes tillogd
. Hvis dine logfiler har taggetMyApp
, kontrolleres følgende egenskaber og forventes at indeholde det første bogstav med den mindste sværhedsgrad (V
D
I
W
E
, ellerS
for at deaktivere alle logfiler):
log.tag.MyApp
persist.log.tag.MyApp
log.tag
persist.log.tag
liblog
bruger minimumsprioriteten indstillet af__android_log_set_minimum_priority
. Standardindstillingen er INFO
.adb logcat
understøtter yderligere filtre, der kan reducere mængden af logfiler vist fralogd
. Se nedenfor for detaljer.Kommandolinjesyntaks
for at køre logcat gennem adb-skallen er den generelle brug:
logcat ... ...
Du kan kørelogcat
som en ADB-kommando eller direkte i en shell-prompt på din emulator eller tilsluttede enhed. For at se logoutput ved hjælp af adb skal du navigere til din SDK platform-tools/
mappe og udføre:
adb logcat
for logcat
onlinehjælp, start en enhed og udfør derefter:
adb logcat --help
Du kan oprette en shell-forbindelse til en enhed og udføre:
$ adb shell# logcat
valg
følgende tabel beskriver kommandolinjeindstillingerne forlogcat
.
mulighed | beskrivelse |
---|---|
-b <buffer> |
Indlæs en alternativ logbuffer til visning, såsom events eller radio main system ogcrash buffersæt bruges som standard. Se Visning Af Alternative Logbuffere. |
-c, --clear |
Ryd (skyl) de valgte buffere og afslut. Standardbuffersættet er main system og crash . For at rydde alle buffere skal du bruge -b all -c . |
-e <expr>, --regex=<expr> |
kun udskrive linjer, hvor logmeddelelsen matcher<expr> hvor<expr> er et regulært udtryk. |
-m <count>, --max-count=<count> |
Afslut efter udskrivning<count> antal linjer. Dette er beregnet til at blive parret med --regex , men vil arbejde alene. |
--print |
parret med--regex og--max-count for at lade indhold omgå regeksfilteret, men stadig stoppe ved det rigtige antal kampe. |
-d |
Dump loggen til skærmen og afslutter. |
-f <filename>
|
skriv log besked output til <filename> . Standard er stdout . |
-g, --buffer-size |
Udskriv størrelsen på den angivne logbuffer og udgange. |
-n <count> |
Indstil det maksimale antal roterede logfiler til<count> . Standardværdien er 4. Kræver -r valgmulighed. |
-r <kbytes> |
Roter logfilen hver<kbytes> af output. Standardværdien er 16. Kræver -f valgmulighed. |
-s |
svarende til filterudtrykket'*:S' , som sætter prioritet for alle tags til lydløs og bruges til at gå forud for en liste over filterudtryk, der tilføjer indhold. Hvis du vil vide mere, skal du gå til afsnittet om filtrering af logoutput. |
-v <format> |
Indstil outputformatet for logmeddelelser. Standard erthreadtime format. For en liste over understøttede formater, gå til afsnittet om Control log outputformat. |
-D, --dividers |
Udskriv skillevægge mellem hver logbuffer. |
-c |
skyl (Ryd) hele loggen og afslut. |
-t <count> |
Udskriv kun det seneste antal linjer. Denne indstilling inkluderer-d funktionalitet. |
-t '<time>' |
Udskriv de seneste linjer siden den angivne tid. Denne indstilling inkluderer-d funktionalitet. Se indstillingen-P for at få oplysninger om citering af parametre med indlejrede mellemrum.
adb logcat -t '01-26 20:52:41.820' |
-T <count> |
Udskriv det seneste antal linjer siden den angivne tid. Denne indstilling inkluderer ikke -d funktionalitet |
-T '<time>' |
Udskriv de seneste linjer siden den angivne tid. Denne indstilling omfatter ikke include -d funktionalitet. Se indstillingen-P for at få oplysninger om citering af parametre med indlejrede mellemrum.
adb logcat -t '01-26 20:52:41.820' |
-L, -last |
Dump logfilerne før den sidste genstart. |
-B, --binary |
Output log ind binær. |
-S, --statistics |
Medtag statistik i output for at hjælpe dig med at identificere og målrette log spammere. |
-G <size> |
Indstil størrelsen på logringbufferen. Kan tilføje K eller M i slutningen for at angive kilobyte eller megabyte. |
-p, --prune |
Udskriv (læs) den aktuelle Tillad (white ) og afvis (black ) lister og tager ingen argumenter som følger:
adb logcat -p |
-P '<list> ...' |
skriv (sæt) Tillad (white ) og afvis (black ) lister til juster logning indhold til et bestemt formål. Du giver et blandet indhold af tilladt (<white> ) og nægtet (~<black> ) listeindgange, hvor <white> eller <black> kan være en UID, UID/PID eller /PID. Med vejledning fra logcat-statistikken (logcat -S ) kan man overveje justeringer af Tillad (white ) og afvis (black ) lister til formål som:
som standard forhindrer logsystemet automatisk den værste lovovertræder i logstatistikken dynamisk for at give plads til nye logmeddelelser. Når det har udtømt heuristikken, beskærer systemet de ældste poster for at give plads til de nye meddelelser. tilføjelse af en tilladelsesliste ( citater
$ adb logcat -P '"<white_and_blacklist>"'oradb shell$ logcat -P '<white_and_blacklist>' følgende eksempel angiver en tillad ( adb logcat -P '"/32676 675 ~/32677 897"' andet Tillad ( ~! worst uid blacklist~1000/! worst pid in system (1000) |
--pid=<pid> ... |
Udskriv kun logfiler fra den givne pid. |
--wrap |
sov i 2 timer, eller når bufferen er ved at pakke, hvad der kommer først. Forbedrer effektiviteten af polling ved at give en about-to-vikle Vækning. |
filtrering af logoutput
- tagget til en logmeddelelse er en kort streng, der angiver den systemkomponent, hvorfra meddelelsen stammer (for eksempel “Vis” for visningssystemet).
- prioriteten er en af følgende tegnværdier, bestilt fra laveste til højeste prioritet:
-
-
V
: Verbose (laveste prioritet) -
D
: Debug -
I
: info -
W
: Advarsel -
E
: fejl -
F
: Fatal -
S
: lydløs (højeste prioritet, hvor intet nogensinde er trykt)
-
Du kan få en liste over tags, der bruges i systemet, med prioriteter, ved at køre logcat og observere de to første kolonner i hver meddelelse, givet som <priority>/<tag>
.
følgende er et eksempel på kort logcat-output opnået med kommandoenlogcat -v brief output
. Det viser, at meddelelsen vedrører prioritetsniveau ” I “og tag “ActivityManager”:
I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...}
for at reducere logoutputtet til et håndterbart niveau kan du begrænse logoutput ved hjælp af filterudtryk. Filterudtryk giver dig mulighed for at angive til systemet de tags-prioriterede kombinationer, du er interesseret i — systemet undertrykker andre meddelelser for de angivne tags.
et filterudtryk følger dette format tag:priority ...
, hvor tag
angiver mærket af interesse, og priority
angiver minimumsniveauet for prioritet for det pågældende tag. Meddelelser for det pågældende tag på eller over den angivne prioritet skrives til loggen. Du kan angive et vilkårligt antal tag:priority
SPECIFIKATIONER i et enkelt filterudtryk. Serien af specifikationer er afgrænset af mellemrum.
Her er et eksempel på et filterudtryk, der undertrykker alle logmeddelelser undtagen dem med tagget “ActivityManager”, ved prioritet “Info” eller derover, og alle logmeddelelser med tag “MyApp”, med prioritet “Debug” eller derover:
adb logcat ActivityManager:I MyApp:D *:S
det endelige element i ovenstående udtryk,*:S
, indstiller prioritetsniveauet for alle tags til “silent”, hvilket sikrer, at kun logmeddelelser med “ActivityManager” og “MyApp” vises. Brug af *:S
er en glimrende måde at sikre, at logoutput er begrænset til de filtre, du udtrykkeligt har angivet — det lader dine filtre fungere som en tilladelsesliste til logoutput.
følgende filterudtryk viser alle logmeddelelser med prioritetsniveau “advarsel” og højere på alle tags:
adb logcat *:W
Hvis du kører logcat fra din udviklingscomputer (versus kører den på en ekstern adb-skal), kan du også indstille et standardfilterudtryk ved at eksportere en værdi for miljøvariablen ANDROID_LOG_TAGS
:
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
Bemærk, at ANDROID_LOG_TAGS
filteret eksporteres ikke til emulator/enhedsinstans, hvis du kører logcat fra en fjernskal eller bruger adb shell logcat
.
Control log outputformat
logmeddelelser indeholder et antal metadatafelter ud over tagget og prioriteten. Du kan ændre outputformatet for meddelelser, så de viser et bestemt metadatafelt. For at gøre det bruger du -v
og angiver et af de understøttede outputformater, der er anført nedenfor.
-
brief
: vis prioritet, tag og PID for processen, der udsteder meddelelsen. -
long
: Vis alle metadatafelter og separate meddelelser med tomme linjer. -
process
: Vis kun PID. -
raw
: Vis den rå logmeddelelse uden andre metadatafelter. -
tag
: Vis kun prioritet og tag. -
thread:
et ældre format, der viser prioritet, PID og TID for tråden, der udsteder meddelelsen. -
threadtime
(standard): Vis dato, påkaldelsestid, prioritet, tag, PID og TID for tråden, der udsteder meddelelsen. -
time
: Vis dato, påkaldelsestid, prioritet, tag og PID for processen, der udsteder meddelelsen.
Når du starter logcat, kan du angive det ønskede outputformat ved at bruge -v
valgmulighed:
logcat
Her er et eksempel, der viser, hvordan du genererer meddelelser i thread
outputformat:
adb logcat -v thread
bemærk, at du kun kan angive et outputformat med -v
, men du kan angive så mange modifikatorer, der giver mening. Logcat ignorerer modifikatorer, der ikke giver mening.
Formatmodifikatorer
Formatmodifikatorer ændrer logcat-output i form af en kombination af en eller flere af følgende modifikatorer. For at specificere en formatmodifikator skal du bruge -v
som følger:
adb logcat -b all -v color -d
hver Android-logmeddelelse har et tag og en prioritet tilknyttet det. Du kan kombinere enhver formatmodifikator med en af følgende formatindstillinger: brief
long
process
raw
tag
thread
threadtime
, and time
.
You can get the format modifier details by typing logcat -v --help
at the command line.
-
color
: Show each priority level with a different color. -
descriptive
: Show log buffer event descriptions. Denne modifikator påvirker kun hændelseslog buffer meddelelser, og har ingen effekt på de andre ikke-binære buffere. Begivenhedsbeskrivelserne kommer fra databasen event-log-tags. -
epoch
: visningstid i sekunder fra 1.januar 1970. -
monotonic
: visningstid i CPU-sekunder startende fra den sidste opstart. -
printable
: sørg for, at enhver binær logning indhold er undsluppet. -
uid
: hvis det er tilladt af adgangskontroller, skal du vise UID eller Android ID for den loggede proces. -
usec
: Vis tiden med præcision ned til mikrosekunder. -
UTC
: visningstid som UTC. -
year
: Tilføj året til den viste tid. -
zone
: tilføj det lokale tidsområde til den viste tid.
visning af alternative logbuffere
Android-logsystemet holder flere cirkulære buffere til logbeskeder, og ikke alle logmeddelelser sendes til standard cirkulær buffer. For at se yderligere logmeddelelser kan du køre kommandoen logcat
med -b
for at anmode om visning af en alternativ cirkulær buffer. Du kan se en af disse alternative buffere:
-
radio
: se bufferen, der indeholder radio/telefoni relaterede meddelelser. -
events
: se de fortolkede binære systemhændelsesbufferbeskeder. -
main
: se hovedlogbufferen (standard) indeholder ikke system-og crashlogmeddelelser. -
system
: Se systemlogbufferen (standard). -
crash
: se crash log buffer (standard). -
all
: se alle buffere. -
default
: rapportermain
system
, ogcrash
buffere.
brugen af -b
indstillingen er:
logcat
Her er et eksempel på, hvordan du får vist en logbuffer, der indeholder radio-og telefonimeddelelser:
adb logcat -b radio
Du kan også angive flere -b
flag for alle de buffere, du vil udskrive, som følger:
logcat -b main -b radio -b events
Du kan angive et enkelt -b
flag med komma-adskilt liste over buffere, for eksempel:
logcat -b main,radio,events
logging fra kode
Log
klasse giver dig mulighed for at oprette logposter i din kode, der vises i logcat-værktøjet. Fælles logning metoder omfatter:
-
Log.v(String, String)
(verbose) -
Log.d(String, String)
(debug) -
Log.i(String, String)
(information) -
Log.w(String, String)
(warning) -
Log.e(String, String)
(error)
For example, using the following call:
Kotlin
Log.i("MyActivity", "MyClass.getView() — get item number $position")
Java
Log.i("MyActivity", "MyClass.getView() — get item number " + position);
The logcat outputs something like:
I/MyActivity( 1557): MyClass.getView() — get item number 1