Logcat er et kommandolinjeverktøy som dumper en logg av systemmeldinger, inkludert stakk spor når thedevice kaster en feil og meldinger som du har skrevet fra din app medLog
klasse.
Denne siden handler om kommandolinjeverktøyet logcat, men du kan også vise logmeldinger fra Logcat-vinduet I Android Studio. For informasjon om visning og filtrering logger Fra Android Studio, se Skrive Og Vise Logger withLogcat.
Logging system oversikt
Android logging system er et sett av strukturerte sirkulære buffere vedlikeholdt av systemprosessen logd
. Settet av tilgjengelige buffere er fast og definert av systemet. De mest relevante er: main
, som lagrer de fleste programlogger, system
, som lagrer meldinger som kommer fra Android OS, og crash
, som lagrer krasjlogger. Hver loggoppføring har en prioritet (en av VERBOSE
DEBUG
INFO
WARNING
ERROR
eller FATAL
), en kode som identifiserer opprinnelsen til loggen, og den faktiske loggmeldingen.
det primære grensesnittet til loggingssystemet er det delte biblioteket liblog
og toppteksten <android/log.h>
. Alle språkspesifikke loggingsfasiliteter kaller til slutt funksjonen __android_log_write
. Som standard kaller den funksjonen __android_log_logd_logger
, som sender loggoppføringen tillogd
ved hjelp av en socket. Fra OG MED API-nivå 30 kan loggingsfunksjonen endres ved å ringe __android_set_log_writer
. Mer informasjon er tilgjengelig i NDK-dokumentasjonen.
Logger som vises avadb logcat
gjennomgår fire nivåer av filtrering:
- Kompileringstid filtrering: avhengig av kompileringsinnstillinger, kan noen logger bli helt fjernet fra binær. Proguard kan for eksempel konfigureres til å fjerne anrop til
Log.d
Fra Java-kode. - systemegenskapsfiltrering:
liblog
spør et sett med systemegenskaper for å bestemme minimumsgradsnivået som skal sendes tillogd
. Hvis loggene dine har taggenMyApp
, kontrolleres følgende egenskaper og forventes å inneholde den første bokstaven med minimum alvorlighetsgrad (V
D
I
W
E
, ellerS
for å deaktivere alle logger):
log.tag.MyApp
persist.log.tag.MyApp
log.tag
persist.log.tag
liblog
minimumsprioriteten satt av __android_log_set_minimum_priority
. Standardinnstillingen er INFO
.adb logcat
støtter flere filtre som kan redusere mengden logger som vises fra logd
. Se nedenfor for detaljer.Kommandolinjesyntaks
for å kjøre logcat gjennom adb-skallet, er den generelle bruken:
logcat ... ...
du kan kjøre logcat
som en adb-kommando eller direkte i en shell-ledetekst på emulatoren eller den tilkoblede enheten. For å vise loggutgang ved hjelp av adb, naviger til SDK platform-tools/
katalog og utfør:
adb logcat
For logcat
online hjelp, start en enhet og kjør deretter:
adb logcat --help
du kan opprette en skallforbindelse til en enhet og utføre:
$ adb shell# logcat
Alternativer
tabellen nedenfor beskriver kommandolinjevalgene til logcat
.
Alternativ | Beskrivelse |
---|---|
-b <buffer> |
Last inn en alternativ loggbuffer for visning, for eksempel events eller radio main system ogcrash buffersett brukes som standard. Se Vise Alternative Logbuffere. |
-c, --clear |
Fjern (flush) de valgte bufferne og avslutt. Standard buffersett er main system ogcrash . For å fjerne alle bufferne, bruk -b all -c . |
bare skriv ut linjer der loggmeldingen samsvarer <expr> der<expr> er et regulært uttrykk. |
|
-m <count>, --max-count=<count> |
Avslutt etter utskrift <count> antall linjer. Dette er ment å være parret med --regex , men vil fungere alene. |
Parret med --regex og--max-count for å la innhold omgå regex-filteret, men likevel stoppe ved riktig antall treff. |
|
-d |
Dump loggen til skjermen og avslutter. |
-f <filename> |
Skriv loggmeldingsutgang til<filename> . Standard er stdout . |
-g, --buffer-size |
Skriv ut størrelsen på den angitte loggbufferen og utgangene. |
-n <count> |
Sett maksimalt antall roterte logger til<count> . Standardverdien er 4. Krever -r – alternativet. |
-r <kbytes> |
Roter loggfilen hver <kbytes> av utdata. Standardverdien er 16. Krever -f alternativet. |
-s |
Tilsvarer filteruttrykket '*:S' , som setter prioritet for alle tagger til lydløs, og brukes til å gå foran en liste over filteruttrykk som legger til innhold. For å lære mer, gå til delen om filtrering av loggutgang. |
-v <format> |
Angi utdataformatet for loggmeldinger. Standard erthreadtime format. For en liste over støttede formater, gå til delen Om Utdataformatet For kontrollloggen. |
-D, --dividers |
Skriv ut skillevegger mellom hver loggbuffer. |
-c |
Tøm hele loggen og avslutt. |
-t <count> |
Skriv ut bare det siste antallet linjer. Dette alternativet inkluderer-d funksjonalitet. |
-t '<time>' |
Skriv ut de siste linjene siden den angitte tiden. Dette alternativet inkluderer-d funksjonalitet. Se Alternativet-P for informasjon om sitering av parametere med innebygde mellomrom.
adb logcat -t '01-26 20:52:41.820' |
-T <count> |
Skriv ut det siste antallet linjer siden den angitte tiden. Dette alternativet inkluderer ikke-d funksjonalitet |
-T '<time>' |
Skriv ut de siste linjene siden angitt tid. Dette alternativet inkluderer ikke inkluder-d funksjonalitet. Se Alternativet-P for informasjon om sitering av parametere med innebygde mellomrom.
adb logcat -t '01-26 20:52:41.820' |
-L, -last |
Dump loggene før siste omstart. |
-B, --binary |
Utfør loggen i binær. |
-S, --statistics |
Inkluder statistikk i utdataene for å hjelpe deg med å identifisere og målrette loggspammere. |
-G <size> |
Angi størrelsen på loggringbufferen. Kan legge til K ellerM på slutten for å indikere kilobyte eller megabyte. |
Skriv ut (les) den nåværende tillatelsen (white ) og deny (black ) lister og tar ingen argumenter, som følger:
adb logcat -p |
|
--pid=<pid> ... |
bare skriv ut logger fra gitt pid. |
--wrap |
Sov i 2 timer eller når bufferen er i ferd med å vikle det som kommer først. Forbedrer effektiviteten av polling ved å gi en om-til-wrap reaktivering. |
Filtreringsloggutgang
- koden til en loggmelding er en kort streng som angir systemkomponenten som meldingen kommer fra (for eksempel «Vis» for visningssystemet).
- prioriteten er en av følgende tegnverdier, sortert fra laveste til høyeste prioritet:
-
V
: Detaljert (laveste prioritet) -
D
: Feilsøking -
I
: info -
W
: Advarsel -
F
: Fatal -
S
: Stille (høyeste prioritet, som ingenting er skrevet på)
E
: Feil
du kan få en liste over koder som brukes i systemet, med prioriteringer, ved å kjøre logcat og observere de to første kolonnene i hver melding, gitt som <priority>/<tag>
.
følgende er et eksempel på kort logcat-utgang oppnådd med kommandoenlogcat -v brief output
. Det viser at meldingen gjelder prioritetsnivå » I » og tag «ActivityManager»:
I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...}
hvis du vil redusere loggutgangen til et håndterbart nivå, kan du begrense loggutgangen ved hjelp av filteruttrykk. Filteruttrykk lar deg angi for systemet kodene-prioriterte kombinasjoner du er interessert i-systemet undertrykker andre meldinger for de angitte kodene.
et filteruttrykk følger dette formatet tag:priority ...
, der tag
angir koden av interesse ogpriority
angir minimum prioritetsnivå som skal rapporteres for den koden. Meldinger for denne taggen ved eller over den angitte prioriteten skrives til loggen. Du kan levere et hvilket som helst antalltag:priority
spesifikasjoner i et enkelt filteruttrykk. Serien av spesifikasjoner er whitespace-avgrenset.Her er et eksempel på et filteruttrykk som undertrykker alle loggmeldinger unntatt de med taggen «ActivityManager» , med prioritet «Info» eller over, og alle loggmeldinger med taggen «MyApp» , med prioritet «Debug» eller over:
adb logcat ActivityManager:I MyApp:D *:S
det siste elementet i uttrykket ovenfor,*:S
, setter prioritetsnivået for alle tagger til «stille», og sikrer dermed at bare loggmeldinger med» ActivityManager «og» MyApp » vises. Å bruke *:S
er en utmerket måte å sikre at loggutgang er begrenset til filtrene du eksplisitt har angitt — det lar filtrene dine fungere som en tillatelsesliste for loggutgang.
følgende filteruttrykk viser alle loggmeldinger med prioritetsnivå «advarsel» og høyere, på alle tagger:
adb logcat *:W
hvis du kjører logcat fra utviklingsdatamaskinen din (i motsetning til å kjøre den på et eksternt adb-skall), kan du også angi et standardfilteruttrykk ved å eksportere en verdi for miljøvariabelen ANDROID_LOG_TAGS
:
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
Merk at ANDROID_LOG_TAGS
filteret eksporteres ikke til emulator/enhetsforekomsten, hvis du kjører logcat fra et eksternt skall eller bruker adb shell logcat
.
utdataformat For Kontrolllogg
Loggmeldinger inneholder en rekke metadatafelt, i tillegg til taggen og prioriteten. Du kan endre utdataformatet for meldinger slik at de viser et bestemt metadatafelt. For å gjøre dette bruker du alternativet-v
og angir et av de støttede utdataformatene som er oppført nedenfor.
-
brief
: Vis prioritet, kode og PID for prosessen som utsteder meldingen. -
long
: Vis alle metadatafelt og separate meldinger med tomme linjer. -
process
: Vis BARE PID. -
raw
: Vis den rå loggmeldingen uten andre metadatafelt. -
tag
: Vis kun prioritet og kode. -
thread:
et eldre format som viser prioritet, PID og TID for tråden som utsteder meldingen. -
threadtime
(standard): Vis dato, påkallingstid, prioritet, tag, PID og TID for tråden som utsteder meldingen. -
time
: Vis dato, påkallingstid, prioritet, tag og PID for prosessen som utsteder meldingen.
når du starter logcat, kan du angi utdataformatet du vil bruke ved å bruke -v
alternativ:
logcat
her er et eksempel som viser hvordan du genererer meldinger i thread
utdataformat:
adb logcat -v thread
merk at du bare kan angi ett utdataformat med alternativet -v
, men du kan angi så mange modifikatorer som gir mening. Logcat ignorerer modifikatorer som ikke gir mening.
Formatmodifikatorer
formatmodifikatorer endrer logcat-utdataene i form av en kombinasjon av en eller flere av følgende modifikatorer. For å angi en formatmodifikator, bruk -v
alternativet, som følger:
adb logcat -b all -v color -d
Hver Android-loggmelding har en tag og en prioritet knyttet til den. Du kan kombinere alle formatmodifikatorer med ett av følgende formatalternativer: 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 modifikatoren påvirker bare hendelsesloggbuffermeldinger, og har ingen effekt på de andre ikke-binære bufferne. Hendelsesbeskrivelsene kommer fra databasen event-log-tags. -
epoch
: Visningstid i sekunder fra 1.Januar 1970. -
monotonic
: Vis TID I CPU sekunder fra siste oppstart. -
printable
: Sørg for at alt binært logging innhold er rømt. -
uid
: hvis tilgangskontrollene tillater det, må DU vise UID-EN eller Android-ID-en for den loggede prosessen. -
usec
: Vis tiden med presisjon ned til mikrosekunder. -
UTC
: Vis tid som UTC. -
year
: Legg året til den viste tiden. -
zone
: Legg til lokal tidssone i den viste tiden.
Vise alternative loggbuffere
android logging systemet holder flere sirkulære buffere for loggmeldinger, og ikke alle loggmeldingene sendes til standard sirkulær buffer. For å se flere loggmeldinger, kan du kjørelogcat
kommandoen med -b
alternativet, for å be om visning av en alternativ sirkulær buffer. Du kan se hvilken som helst av disse alternative bufferne:
-
radio
: Vis bufferen som inneholder radio / telefoni-relaterte meldinger. -
events
: Vis de tolkede hendelsesbuffermeldingene for binært system. -
main
: Vis hovedloggbufferen (standard) inneholder ikke system-og krasjloggmeldinger. -
system
: Vis systemloggbufferen (standard). -
crash
: Vis krasjloggbufferen(standard). -
all
: Vis alle buffere.
default
: Rapporter main
system
og crash
buffere.
bruken av-b
alternativet er:
logcat
her er et eksempel på hvordan du viser en loggbuffer som inneholder radio-og telefoni-meldinger:
adb logcat -b radio
du kan også angi flere-b
flagg for alle bufferne du vil skrive ut, som følger:
logcat -b main -b radio -b events
du kan angi et enkelt-b
flagg med komma-separert liste over buffere, for eksempel:
logcat -b main,radio,events
logging fra kode
Log
klassen lar deg lage loggoppføringer i koden din som vises i logcat-verktøyet. Vanlige loggingsmetoder inkluderer:
-
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