Maybaygiare.org

Blog Network

Logcat command-line tool

Logcat är ett kommandoradsverktyg som dumpar en logg över systemmeddelanden, inklusive stack spår när thedevice kastar ett fel och meddelanden som du har skrivit från din app medLog klass.

den här sidan handlar om kommandoraden logcat-verktyget, men du kan också visa logmessages från Logcat-fönstret i Android Studio. Forinformation om visning och filtrering loggar från Android Studio,se Skriva och visa loggar withLogcat.

Loggningssystemöversikt

Android-loggningssystemet är en uppsättning strukturerade cirkulära buffertar som underhålls av systemprocessen logd. Uppsättningen tillgängliga buffertar är fast och definierad av systemet. De mest relevanta är: main, som lagrar de flesta applikationsloggar, system, som lagrar meddelanden som härrör från Android OS och crash, som lagrar kraschloggar. Varje loggpost har en prioritet (en av VERBOSEDEBUGINFOWARNINGERROR eller FATAL), en tagg som identifierar loggens ursprung och det faktiska loggmeddelandet.

det primära gränssnittet till loggningssystemet är det delade biblioteket liblog och dess rubrik <android/log.h>. Alla Språkspecifika loggningsanläggningar kallar så småningom funktionen __android_log_write. Som standard anropar den funktionen __android_log_logd_logger, som skickar loggposten till logd med ett uttag. Från och med API-nivå 30 kan loggningsfunktionen ändras genom att ringa __android_set_log_writer. Mer information finns i NDK-dokumentationen.

loggar som visas av adb logcat genomgår fyra nivåer av filtrering:

  1. Kompileringstidsfiltrering: beroende på kompileringsinställningar kan vissa loggar tas bort helt från binären. Till exempel kan Proguard konfigureras för att ta bort samtal till Log.d från Java-kod.
  2. systemegenskapsfiltrering: liblog frågar en uppsättning systemegenskaper för att bestämma den minsta svårighetsgraden som ska skickas till logd. Om dina loggar har taggen MyApp, kontrolleras följande egenskaper och förväntas innehålla den första bokstaven med minsta svårighetsgrad (VDIWE, eller S för att inaktivera alla loggar):
  • log.tag.MyApp
  • persist.log.tag.MyApp

  • log.tag
  • persist.log.tag
  • programfiltrering: Om ingen av egenskaperna är inställda använder liblog den LÄGSTA prioritet som anges av __android_log_set_minimum_priority. Standardinställningen är INFO.
  • Displayfiltrering: adb logcat stöder ytterligare filter som kan minska mängden loggar som visas från logd. Se nedan för mer information.
  • Kommandoradssyntax

    för att köra logcat genom adb-skalet är den allmänna användningen:

     logcat ... ...

    Du kan köra logcat som ett adb-kommando eller direkt i en skalprompt på din emulator eller ansluten enhet. För att visa loggutmatning med adb, navigera till din SDK platform-tools/ katalog och kör:

    adb logcat

    för logcat onlinehjälp, starta en enhet och kör sedan:

    adb logcat --help

    Du kan skapa en shell-anslutning till en enhet och köra:

    $ adb shell# logcat

    alternativ

    Följande tabell beskriver kommandoradsalternativen för logcat.

    -b <buffer>

    alternativ beskrivning
    ladda en alternativ loggbuffert för visning, till exempel eventsellerradiomainsystem ochcrash buffertuppsättning används som standard. Se Visa Alternativa Loggbuffertar.
    -c, --clear rensa (spola) de valda buffertarna och avsluta. Standardbuffertuppsättningen är mainsystem och crash. För att rensa alla buffertar, använd -b all -c.
    -e <expr>, --regex=<expr> endast skriva ut rader där loggmeddelandet matchar <expr> där <expr> är ett reguljärt uttryck.
    -m <count>, --max-count=<count> avsluta efter utskrift <count> antal rader. Detta är tänkt att vara parat med --regex, men kommer att fungera på egen hand.
    --print parat med --regex och --max-count för att låta innehåll kringgå regex-filtret, men ändå stanna vid rätt antal matchningar.
    -d dumpa loggen till skärmen och avslutar.
    -f <filename> skriv loggmeddelandeutmatning till <filename>. Standardvärdet är stdout.
    -g, --buffer-size Skriv ut storleken på den angivna loggbufferten och utgångar.
    -n <count> Ställ in det maximala antalet roterade loggar till <count>. Standardvärdet är 4. Kräver alternativet -r.
    -r <kbytes> rotera loggfilen varje<kbytes> utgång. Standardvärdet är 16. Kräver alternativet -f.
    -s motsvarande filteruttrycket'*:S', som sätter prioritet för alla taggar till tyst, och används för att föregå en lista med filteruttryck som lägger till innehåll. För att lära dig mer, gå till avsnittet om filtrering av loggutmatning.
    -v <format> Ställ in utgångsformatet för loggmeddelanden. Standardvärdet ärthreadtime format. För en lista över format som stöds, gå till avsnittet Om Control log output format.
    -D, --dividers Skriv ut avdelare mellan varje loggbuffert.
    -c spola (rensa) hela loggen och avsluta.
    -t <count> Skriv bara ut det senaste antalet rader. Det här alternativet inkluderar-d funktionalitet.
    -t '<time>' Skriv ut de senaste raderna sedan den angivna tiden. Det här alternativet inkluderar-d funktionalitet. Se alternativet-P för information om att citera parametrar med inbäddade mellanslag.

    adb logcat -t '01-26 20:52:41.820'
    -T <count> Skriv ut det senaste antalet rader sedan den angivna tiden. Det här alternativet inkluderar inte-d funktionalitet
    -T '<time>' Skriv ut de senaste raderna sedan den angivna tiden. Det här alternativet inkluderar inte include -d funktionalitet. Se alternativet-P för information om att citera parametrar med inbäddade mellanslag.

    adb logcat -t '01-26 20:52:41.820'
    -L, -last dumpa loggarna före den senaste omstarten.
    -B, --binary mata ut loggen i binär.
    -S, --statistics inkludera statistik i utdata för att hjälpa dig att identifiera och rikta loggspammare.
    -G <size> Ställ in storleken på loggringbufferten. Kan lägga till K eller M I slutet för att indikera kilobyte eller megabyte.
    -p, --prune Skriv ut (läs) den aktuella Tillåt (white) och Neka (black) listor och tar inga argument, enligt följande:

    adb logcat -p
    -P '<list> ...'
    --prune '<list> ...' -P '<white_and_black_list>'
    skriv (set) Tillåt (white) och Neka (black) listor för att justera logga innehåll för ett specifikt syfte. Du tillhandahåller ett blandat innehåll av tillåtna (<white>) och nekade (~<black>) listposter, där <white> eller <black> kan vara en UID, UID/PID eller /PID. Med vägledning från logcat-statistiken (logcat -S) kan man överväga justeringar av Tillåt (white) och Neka (black) listor för ändamål som:

    • ger den högsta livslängden för specifikt loggningsinnehåll genom UID-val.
    • förhindra att någon (UID) eller något (PID) konsumerar dessa resurser för att öka logspan så att du kan få mer synlighet i de problem du diagnostiserar.

    som standard förhindrar loggningssystemet automatiskt den värsta gärningsmannen i loggstatistiken dynamiskt för att göra plats för nya loggmeddelanden. När det har uttömt heuristiken, systemet katrinplommon de äldsta posterna för att göra plats för de nya meddelandena.

    lägga till en allowlist (whitelist) skyddar ditt Android-identifikationsnummer (AID), vilket blir processernas hjälp och GID från att förklaras en förövare, och att lägga till en denylist hjälper till att frigöra utrymme innan de värsta brottslingarna beaktas. Du kan välja hur aktiv beskärningen är och du kan stänga av beskärningen så att den bara tar bort innehåll från de äldsta posterna i varje loggbuffert.

    citat

    adb logcat bevarar inte citaten, så syntaxen för att ange Tillåt (white) och Neka (black) listor är som följer:

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

    i följande exempel anges en lista med tillåt (white) med PID 32676 och uid 675 och en lista med neka (black) med PID 32677 och uid 897. PID 32677 på denylist viktas för snabbare beskärning.

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

    andra Tillåt (white) och Neka (black) lista kommandovariationer du kan använda är följande:

    ~! worst uid blacklist~1000/! worst pid in system (1000)
    --pid=<pid> ... endast skriva ut loggar från den angivna PID.
    --wrap sova i 2 timmar eller när bufferten håller på att linda in det som kommer först. Förbättrar effektiviteten i polling genom att ge en om-till-wrap wakeup.

    Filtreringsloggutgång

    • taggen för ett loggmeddelande är en kort sträng som anger Systemkomponenten från vilken meddelandet härstammar (till exempel” visa ” för vysystemet).
    • prioriteten är ett av följande teckenvärden, ordnade från lägsta till högsta prioritet:
      • V: Verbose (LÄGSTA prioritet)
      • D: Debug
      • I: info
      • W: Varning
      • E: fel
      • F: dödlig
      • S: tyst (högsta prioritet, på vilken ingenting någonsin skrivs ut)

    Du kan få en lista med taggar som används i systemet, med prioriteringar, genom att köra logcat och observera de två första kolumnerna i varje meddelande, givet som <priority>/<tag>.

    Följande är ett exempel på kort logcat-utgång erhållen med kommandot logcat -v brief output. Det visar att meddelandet avser prioritetsnivå ”I” och tagg ”ActivityManager”:

    I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...}

    för att minska loggutmatningen till en hanterbar nivå kan du begränsa loggutmatningen med filteruttryck. Filteruttryck låter dig ange för systemet de taggar-prioriterade kombinationer som du är intresserad av — systemet undertrycker andra meddelanden för de angivna taggarna.

    ett filteruttryck följer detta format tag:priority ..., där tag anger taggen av intresse och priority anger miniminivån för prioritet att rapportera för den taggen. Meddelanden för den taggen vid eller över den angivna prioriteten skrivs till loggen. Du kan ange valfritt antal tag:priority SPECIFIKATIONER i ett enda filteruttryck. Serien av specifikationer är blankutrymme avgränsad.

    Här är ett exempel på ett filteruttryck som undertrycker alla loggmeddelanden utom de med taggen ”ActivityManager”, vid prioritet ”Info” eller högre, och alla loggmeddelanden med taggen ”MyApp” , med prioritet ”Debug” eller högre:

    adb logcat ActivityManager:I MyApp:D *:S

    det sista elementet i ovanstående uttryck, *:S, ställer in prioritetsnivån för alla taggar till ”tyst”, vilket säkerställer att endast loggmeddelanden med ”ActivityManager” och ”MyApp” visas. Att använda *:S är ett utmärkt sätt att se till att loggutmatningen är begränsad till de filter som du uttryckligen har angett — det låter dina filter fungera som en tillåtlista för loggutmatning.

    följande filteruttryck visar alla loggmeddelanden med prioritetsnivå ”varning” och högre, på alla taggar:

    adb logcat *:W

    om du kör logcat från din utvecklingsdator (jämfört med att köra den på ett avlägset adb-skal) kan du också ställa in ett standardfilteruttryck genom att exportera ett värde för miljövariabeln ANDROID_LOG_TAGS:

    export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"

    Observera att filtret exporteras inte till emulatorn/enhetsinstansen, om du kör logcat från ett fjärrskal eller använder adb shell logcat.

    Control log output format

    loggmeddelanden innehåller ett antal metadatafält, förutom taggen och prioriteten. Du kan ändra utdataformatet för meddelanden så att de visar ett specifikt metadatafält. För att göra det använder du alternativet -v och anger ett av de utdataformat som stöds nedan.

    • brief: Visa prioritet, tagg och PID för processen som utfärdar meddelandet.
    • long: Visa alla metadatafält och separata meddelanden med tomma rader.
    • process: Visa endast PID.
    • raw: visa det råa loggmeddelandet utan andra metadatafält.
    • tag: Visa Endast prioritet och tagg.
    • thread: ett äldre format som visar prioritet, PID och TID för tråden som utfärdar meddelandet.
    • threadtime (standard): Visa datum, anropstid, prioritet, tagg, PID och TID för tråden som utfärdar meddelandet.
    • time: Visa datum, anropstid, prioritet, tagg och PID för processen som utfärdar meddelandet.

    När du startar logcat kan du ange det utdataformat du vill använda alternativet -v:

     logcat 

    Här är ett exempel som visar hur du skapar meddelanden i thread utdataformat:

    adb logcat -v thread

    Observera att du bara kan ange ett utdataformat med alternativet -v, men du kan ange så många modifierare som är vettiga. Logcat ignorerar modifierare som inte är vettiga.

    Formatmodifierare

    Formatmodifierare ändrar logcat-utmatningen i termer av valfri kombination av en eller flera av följande modifierare. För att ange en formatmodifierare, använd alternativet -v enligt följande:

    adb logcat -b all -v color -d

    varje Android-loggmeddelande har en tagg och en prioritet associerad med den. Du kan kombinera alla formatmodifierare med något av följande Formatalternativ: 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. Denna modifierare påverkar endast händelseloggen buffertmeddelanden, och har ingen effekt på de andra icke-binära buffertar. Händelsebeskrivningarna kommer från databasen event-log-tags.
    • epoch: visningstid i sekunder från 1 Jan 1970.
    • monotonic: visningstid i CPU-sekunder från den senaste starten.
    • printable: se till att eventuellt binärt loggningsinnehåll undviks.
    • uid: om det tillåts av åtkomstkontroller, visa UID eller Android-ID för den loggade processen.
    • usec: visa tiden med precision ner till mikrosekunder.
    • UTC: visningstid som UTC.
    • year: Lägg till året till den visade tiden.
    • zone: Lägg till den lokala tidszonen till den visade tiden.

    visa alternativa loggbuffertar

    Android-loggningssystemet håller flera cirkulära buffertar för loggmeddelanden, och inte alla loggmeddelanden skickas till standardcirkelbufferten. För att se ytterligare loggmeddelanden kan du köra kommandot logcat med alternativet -b för att begära visning av en alternativ cirkulär buffert. Du kan visa någon av dessa alternativa buffertar:

    • radio: Visa bufferten som innehåller radio/telefonirelaterade meddelanden.
    • events: visa de tolkade buffertmeddelandena för binära systemhändelser.
    • main: Visa huvudloggbufferten (standard) innehåller inte system-och kraschloggmeddelanden.
    • system: Visa systemloggbufferten (standard).
    • crash: Visa kraschloggbufferten (standard).
    • all: Visa alla buffertar.
    • default: rapporter mainsystem och crash buffertar.

    användningen av alternativet -b är:

     logcat 

    Här är ett exempel på hur du visar en loggbuffert som innehåller radio-och telefonimeddelanden:

    adb logcat -b radio

    Du kan också ange flera-b flaggor för alla buffertar du vill skriva ut, enligt följande:

    logcat -b main -b radio -b events

    Du kan ange en enda-b flagga med kommatecken-Separerad lista över buffertar, till exempel:

    logcat -b main,radio,events

    loggning från kod

    Log klass låter dig skapa loggposter i din kod som visas i logcat-verktyget. Vanliga loggningsmetoder inkluderar:

    • 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

    Lämna ett svar

    Din e-postadress kommer inte publiceras.