Maybaygiare.org

Blog Network

Logcat kommandolinjeverktøy

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 VERBOSEDEBUGINFOWARNINGERROR 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:

  1. 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.
  2. systemegenskapsfiltrering: liblog spør et sett med systemegenskaper for å bestemme minimumsgradsnivået som skal sendes til logd. Hvis loggene dine har taggen MyApp, kontrolleres følgende egenskaper og forventes å inneholde den første bokstaven med minimum alvorlighetsgrad (VDIWE, eller S for å deaktivere alle logger):
  • log.tag.MyApp
  • persist.log.tag.MyApp
  • log.tagpersist.log.tag

  • programfiltrering: Hvis ingen av egenskapene er angitt, bruker liblog minimumsprioriteten satt av __android_log_set_minimum_priority. Standardinnstillingen er INFO.
  • Skjermfiltrering: 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.

    -e <expr>, --regex=<expr>

    --print

    -p, --prune

    -P '<list> ...'
    --prune '<list> ...' -P '<white_and_black_list>'
    skriv (sett) tillat (white) og nekt (black) lister for å justere logge innhold for et bestemt formål. Du gir et blandet innhold av tillatt (<white>) og nektet (~<black>) listeoppføringer, der<white> eller<black> kan være EN UID, UID/PID eller /PID. Med veiledning fra logcat statistikk (logcat -S), kan man vurdere justeringer til tillat (white) og deny (black) lister for formål som:

    • Gi den høyeste levetiden til bestemt logging innhold GJENNOM uid valg.
    • Forhindre at NOEN (UID) eller NOE (PID) bruker disse ressursene for å øke logspan slik at du kan få mer synlighet i problemene du diagnostiserer.

    som standard loggsystemet hindrer automatisk den verste lovbryteren i loggstatistikken dynamisk å gjøre plass til nye loggmeldinger. Når det har uttømt heuristikken, svisker systemet de eldste oppføringene for å gjøre plass til de nye meldingene.

    Å Legge til en allowlist (whitelist) beskytter Android-Identifikasjonsnummeret ditt (AID), som blir prosessens HJELPEMIDDEL og GID fra å bli erklært en lovbryter, og å legge til en denylist bidrar til å frigjøre plass før de verste lovbryterne blir vurdert. Du kan velge hvor aktiv beskjæringen er, og du kan slå av beskjæring slik at den bare fjerner innhold fra de eldste oppføringene i hver loggbuffer.

    Sitater

    adb logcatbeholder ikke sitatene, så syntaksen for å spesifisere tillat (white) og nekt (black) lister er som følger:

    $ adb logcat -P '"<white_and_blacklist>"'oradb shell$ logcat -P '<white_and_blacklist>'

    følgende eksempel angir en tillat (white) liste med pid 32676 og uid 675, og en deny (black) liste med pid 32677 og uid 897. PID 32677 på denylist er vektet for raskere beskjæring.

    adb logcat -P '"/32676 675 ~/32677 897"'

    Andre tillate (white) og nekte (black) liste kommandovariasjoner du kan bruke er som følger:

    ~! worst uid blacklist~1000/! worst pid in system (1000)
    Alternativ Beskrivelse
    -b <buffer> Last inn en alternativ loggbuffer for visning, for eksempel eventseller radiomainsystem ogcrash buffersett brukes som standard. Se Vise Alternative Logbuffere.
    -c, --clear Fjern (flush) de valgte bufferne og avslutt. Standard buffersett er mainsystemogcrash. 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 --regexog--max-countfor å 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 KellerM 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
    • E: Feil

    • F: Fatal
    • S: Stille (høyeste prioritet, som ingenting er skrevet på)

    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 tagangir 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: brieflongprocessrawtagthreadthreadtime, 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 mainsystemog crashbuffere.

    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

    Legg igjen en kommentar

    Din e-postadresse vil ikke bli publisert.