Maybaygiare.org

Blog Network

Logcat command-line tool

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 VERBOSEDEBUGINFOWARNINGERROR eller FATAL), et tag, der identificerer logens oprindelse og den faktiske logmeddelelse.

den primære grænseflade til logsystemet er det delte bibliotek liblogog 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:

  1. 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.
  2. systemegenskabsfiltrering:liblog forespørger et sæt Systemegenskaber for at bestemme det mindste sværhedsgrad, der skal sendes tillogd. Hvis dine logfiler har tagget MyApp, kontrolleres følgende egenskaber og forventes at indeholde det første bogstav med den mindste sværhedsgrad (VDIWE, eller S for at deaktivere alle logfiler):
  • log.tag.MyApp
  • persist.log.tag.MyApp
  • log.tag
  • persist.log.tag
  • applikationsfiltrering: Hvis ingen af egenskaberne er indstillet,liblog bruger minimumsprioriteten indstillet af__android_log_set_minimum_priority. Standardindstillingen er INFO.
  • Displayfiltrering: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 radiomainsystem ogcrash buffersæt bruges som standard. Se Visning Af Alternative Logbuffere.
    -c, --clear Ryd (skyl) de valgte buffere og afslut. Standardbuffersættet er mainsystem 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> ...'
    --prune '<list> ...' -P '<white_and_black_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:

    • giver den højeste levetid til specifikt logningsindhold gennem uid-valg.
    • forhindre nogen (UID) eller noget (PID) i at forbruge disse ressourcer for at øge logspan, så du kan få mere synlighed i de problemer, du diagnosticerer.

    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 (whitelist) beskytter dit Android-identifikationsnummer (AID), som bliver processernes hjælp og GID fra at blive erklæret en lovovertræder, og tilføjelse af en denylist hjælper med at frigøre plads, før de værste lovovertrædere overvejes. Du kan vælge, hvor aktiv beskæringen er, og du kan slå beskæring fra, så den kun fjerner indhold fra de ældste poster i hver logbuffer.

    citater

    adb logcat bevarer ikke citaterne, så syntaksen til angivelse af Tillad (white) og afvis (black) lister er som følger:

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

    følgende eksempel angiver en tillad (white) liste med PID 32676 og uid 675 og en Afvis (black) liste med PID 32677 og uid 897. PID 32677 på denylisten vægtes for hurtigere beskæring.

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

    andet Tillad (white) og afvis (black) liste kommandovariationer, du kan bruge, er som følger:

    ~! 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 tagangiver 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: 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 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: rapportermainsystem, 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

    Skriv et svar

    Din e-mailadresse vil ikke blive publiceret.