Maybaygiare.org

Blog Network

Logcat command-line tool

Logcat is een command-line tool die een log van systeemberichten dumpt, inclusief stack traces wanneer het apparaat een fout gooit en berichten die u hebt geschreven vanuit uw app met deLog klasse.

deze pagina gaat over de opdrachtregel logcat tool, maar u kunt ook logmessages bekijken vanuit het logcat venster in Android Studio. Zie Logboeken schrijven en bekijken metlogcat voor informatie over het bekijken en filteren van logs van Android Studio.

Logging system overview

het Android logging system is een set van gestructureerde circulaire buffers onderhouden door het systeemproces logd. De set beschikbare buffers wordt door het systeem vastgezet en gedefinieerd. De meest relevante zijn: main, die de meeste applicatielogs opslaat, system, die berichten opslaat die afkomstig zijn van het Android-besturingssysteem, en crash, die crashlogs opslaat. Elke logboekvermelding heeft een prioriteit (één van VERBOSEDEBUGINFOWARNINGERROR of FATAL), een tag die de oorsprong van het logboek identificeert, en het werkelijke Logbericht.

de primaire interface naar het logsysteem is de gedeelde bibliotheek liblog en de header <android/log.h>. Alle taalspecifieke logfaciliteiten noemen uiteindelijk de functie __android_log_write. Standaard roept het de functie __android_log_logd_logger aan, die de log invoer naar logd stuurt met behulp van een socket. Beginnend met API level 30, kan de logfunctie worden gewijzigd door __android_set_log_writeraan te roepen. Meer informatie is beschikbaar in de NDK documentatie.

Logs weergegeven door adb logcat ondergaan vier filterniveaus:

  1. Compileertijdfiltering: afhankelijk van compilatie-instellingen kunnen sommige logs volledig uit het binaire bestand worden verwijderd. Proguard kan bijvoorbeeld worden geconfigureerd om oproepen naar Log.d uit Java-code te verwijderen.
  2. systeemeigenheidsfiltering: liblog vraagt een set Systeemeigenschappen aan om het minimale ernstniveau te bepalen dat naar logdmoet worden verzonden. Als je log hebt de tag MyApp, met de volgende eigenschappen worden gecontroleerd, en worden verwacht om de eerste letter van de minimale ernst (VDIWE of S uitschakelen alle logs):
  • log.tag.MyApp
  • persist.log.tag.MyApp
  • log.tag
  • persist.log.tag
  • Toepassing filteren: Als geen van de eigenschappen is ingesteld, gebruikt liblog de minimumprioriteit die is ingesteld door __android_log_set_minimum_priority. De standaardinstelling is INFO.
  • Schermfiltering: adb logcat ondersteunt extra filters die het aantal getoonde logs kunnen verminderen vanaf logd. Zie hieronder voor meer informatie.
  • Opdrachtregelsyntaxis

    om logcat door de adb-shell te draaien, wordt het algemene gebruik:

     logcat ... ...

    u kunt logcat uitvoeren als een ADB-commando of direct in een shell-prompt van uw emulator of verbonden apparaat. Om de loguitvoer met adb te bekijken, navigeert u naar uw SDK platform-tools/ map en voert u uit:

    adb logcat

    Voor logcat online help, start een apparaat en voer vervolgens uit:

    adb logcat --help

    u kunt een shell-verbinding maken met een apparaat en uitvoeren:

    $ adb shell# logcat

    opties

    de volgende tabel beschrijft de commandoregelopties van logcat.

    Option Description
    -b <buffer> Laad een alternatieve logbuffer voor weergave, zoals eventsorradio. De buffersetmainsystem, encrash wordt standaard gebruikt. Zie Alternatieve Logbuffers Bekijken.
    -c, --clear Wis de geselecteerde buffers en sluit af. De standaard bufferset is mainsystem en crash. Gebruik -b all -com alle buffers te wissen.
    -e <expr>, --regex=<expr> alleen regels afdrukken waarbij het Logbericht overeenkomt met <expr> waarbij <expr> een reguliere expressie is.
    -m <count>, --max-count=<count> Afsluiten na het afdrukken <count> aantal regels. Dit is bedoeld om te worden gekoppeld met --regex, maar zal alleen werken.
    --print gekoppeld met --regex en --max-count om inhoud het regex-filter te laten omzeilen, maar toch te laten stoppen bij het juiste aantal overeenkomsten.
    -d Dump de log naar het scherm en sluit af.
    -f <filename> schrijf de logboekuitvoer naar <filename>. De standaardwaarde is stdout.
    -g, --buffer-size Toon de grootte van de opgegeven logbuffer en sluitingen.
    -n <count> Stel het maximum aantal geroteerde logs in op <count>. De standaardwaarde is 4. Vereist de optie -r.
    -r <kbytes> draai het logbestand elke <kbytes> van de uitvoer. De standaardwaarde is 16. Vereist de optie -f.
    -s gelijk aan de filterexpressie '*:S', die prioriteit voor alle tags op stil stelt, en wordt gebruikt om vooraf te gaan aan een lijst met filterexpressies die inhoud toevoegen. Ga voor meer informatie naar de sectie over het filteren van loguitvoer.
    -v <format> Stel het uitvoerformaat voor logberichten in. De standaardwaarde is threadtime formaat. Voor een lijst van ondersteunde formaten, ga naar de sectie over de controle log output formaat.
    -D, --dividers afdrukdividers tussen elke logbuffer.
    -c spoelen (wissen) de gehele log en afsluiten.
    -t <count> alleen het meest recente aantal regels weergeven. Deze optie bevat -d functionaliteit.
    -t '<time>' druk de meest recente regels af sinds de opgegeven tijd. Deze optie bevat -d functionaliteit. Zie de optie-P voor informatie over het citeren van parameters met ingebedde spaties.

    adb logcat -t '01-26 20:52:41.820'
    -T <count> druk het meest recente aantal regels af sinds de opgegeven tijd. Deze optie omvat niet -d functionaliteit
    -T '<time>' Print de meest recente regels sinds de opgegeven tijd. Deze optie bevat geen include -d functionaliteit. Zie de optie-P voor informatie over het citeren van parameters met ingebedde spaties.

    adb logcat -t '01-26 20:52:41.820'
    -L, -last Dump de logs voor de laatste herstart.
    -B, --binary uitvoer de binaire login.
    -S, --statistics voeg statistieken toe aan de uitvoer om u te helpen log spammers te identificeren en te targeten.
    -G <size> Stel de grootte van de logringbuffer in. Kan K of M aan het einde toevoegen om kilobytes of megabytes aan te geven.
    -p, --prune Print (lezen) de huidige toestaan (white) en weigeren (black) lijsten en geen argumenten, als volgt:

    adb logcat -p
    -P '<list> ...'
    --prune '<list> ...' -P '<white_and_black_list>'
    Schrijven (stellen) de laat (white) en weigeren (black) lijsten aanpassen van de logging content voor een specifiek doel. U geeft een gemengde inhoud van toegestane (<white>) en geweigerde (~<black>) lijstvermeldingen, waarbij <white> of <black> een UID, UID/PID of /PID kan zijn. Met hulp van de logcat statistieken (logcat -S), kan men aanpassingen overwegen aan de allow (white) en deny (black) lijsten voor doeleinden zoals:

    • Geef de hoogste levensduur aan specifieke logging inhoud via UID selecties.
    • voorkom dat iemand (UID) of iets (PID) deze bronnen gebruikt om de logspan te verhogen zodat u meer inzicht hebt in de problemen die u diagnosticeert.

    standaard voorkomt het logboekregistratiesysteem automatisch dat de ergste overtreder in de logstatistieken dynamisch ruimte maakt voor nieuwe logberichten. Zodra het de heuristiek heeft uitgeput, snoeit het systeem de oudste ingangen om ruimte te maken voor de nieuwe berichten.

    het toevoegen van een allowlist (whitelist) beschermt uw Android-identificatienummer (AID), dat de hulp en GID van de processen wordt om een overtreder te worden verklaard, en het toevoegen van een denylist helpt ruimte vrij te maken voordat de ergste overtreders worden beschouwd. U kunt kiezen hoe actief het snoeien is, en u kunt snoeien uitschakelen, zodat het alleen de inhoud verwijdert van de oudste items in elke logbuffer.

    Koersen

    adb logcat behouden niet de aanhalingstekens, dus de syntaxis voor het opgeven toestaan (white) en weigeren (black) lijsten is als volgt:

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

    in Het volgende voorbeeld geeft een toestemming (white) lijst met PID 32676 en UID 675, – en een ontkennen (black) lijst met PID 32677 en UID 897. PID 32677 op de denylist is verzwaard voor sneller snoeien.

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

    andere toestaan (white) en weigeren (black) lijst Commando variaties die u kunt gebruiken zijn als volgt:

    ~! worst uid blacklist~1000/! worst pid in system (1000)
    --pid=<pid> ... alleen logs van de gegeven PID afdrukken.
    --wrap slaap gedurende 2 uur of wanneer de buffer op het punt staat om te worden afgebroken, wat het eerst komt. Verbetert de efficiëntie van peilingen door het verstrekken van een ongeveer-om-wrap wakeup.

    Filtering log output

    • de tag van een logbericht is een korte tekenreeks die aangeeft van welk systeemonderdeel het bericht afkomstig is (bijvoorbeeld” View ” voor het view-systeem).
    • De prioriteit is één van de volgende tekens waarden, gerangschikt van laagste naar hoogste prioriteit:
      • V: Uitgebreid (laagste prioriteit)
      • D: Debug
      • I Info
      • W: Waarschuwing
      • E: Error
      • F: Fatal
      • S: Silent (hoogste prioriteit, waarop nooit wordt afgedrukt)

    u kunt een lijst met tags verkrijgen gebruikt in het systeem, met prioriteiten, door logcat uit te voeren en de eerste twee kolommen van elk bericht te observeren, gegeven als<priority>/<tag>.

    het volgende is een voorbeeld van een korte logcat-uitvoer die is verkregen met het logcat -v brief output Commando. Het toont aan dat het bericht betrekking heeft op prioriteitsniveau ” I “en tag “ActivityManager”:

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

    om de loguitvoer tot een beheersbaar niveau te reduceren, kunt u de loguitvoer beperken met behulp van filteruitdrukkingen. Filteruitdrukkingen laten u aan het systeem de tags-prioriteitscombinaties aangeven waarin u geïnteresseerd bent — het systeem onderdrukt andere berichten voor de opgegeven tags.

    een filteruitdrukking volgt dit formaat tag:priority ..., waarbij tag de tag van belang aangeeft en priority het minimumprioriteitsniveau voor die tag aangeeft. Berichten voor die tag op of boven de opgegeven prioriteit worden naar het logboek geschreven. U kunt een willekeurig aantal tag:priority SPECIFICATIES opgeven in een enkele filterexpressie. De reeks specificaties is witruimte-gescheiden.

    Hier is een voorbeeld van een filterexpressie die alle logberichten onderdrukt behalve die met de tag “ActivityManager”, bij prioriteit “Info” of hoger, en alle logberichten met tag “MyApp”, met prioriteit “Debug” of hoger:

    adb logcat ActivityManager:I MyApp:D *:S

    het laatste element in de bovenstaande uitdrukking, *:S, stelt het prioriteitsniveau voor alle tags in op” stil”, waardoor alleen logberichten met” ActivityManager “en” MyApp ” worden weergegeven. Het gebruik van *:S is een uitstekende manier om ervoor te zorgen dat de log — uitvoer beperkt is tot de filters die u expliciet hebt opgegeven-het laat Uw filters dienen als een allowlist voor log-uitvoer.

    de volgende filteruitdrukking toont alle logberichten met prioriteit “warning” en hoger, op alle tags:

    adb logcat *:W

    Als u logcat van uw computer (ten opzichte van het op afstand adb shell), kunt u ook een standaard filter uitdrukking door het exporteren van een waarde voor de omgevingsvariabele ANDROID_LOG_TAGS:

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

    Merk op dat ANDROID_LOG_TAGS filter wordt niet geëxporteerd naar de emulator/apparaat bijvoorbeeld, als u werkt met logcat van een remote shell of het gebruik van adb shell logcat.

    controle log output formaat

    Log berichten bevatten een aantal metagegevens velden, naast de tag en prioriteit. U kunt het uitvoerformaat voor berichten wijzigen zodat ze een specifiek metadata-veld weergeven. Hiervoor gebruikt u de optie -v en specificeert u een van de ondersteunde uitvoerformaten hieronder.

    • brief: geef prioriteit, tag en PID weer van het proces dat het bericht afgeeft.
    • long: Toon alle metagegevensvelden en aparte berichten met lege regels.
    • process: Alleen PID weergeven.
    • raw: Toon het raw-Logbericht zonder andere metagegevensvelden.
    • tag: alleen de prioriteit en de tag weergeven.
    • thread: een oud formaat dat prioriteit, PID en TID toont van de thread die het bericht afgeeft.
    • threadtime (standaard): Toon de datum, aanroeptijd, prioriteit, tag, PID en TID van de thread die het bericht afgeeft.
    • time: Toon de datum, aanroeptijd, prioriteit, tag en PID van het proces dat het bericht afgeeft.

    bij het starten van logcat kunt u het gewenste uitvoerformaat opgeven met behulp van de -v optie:

     logcat 

    Hier is een voorbeeld dat laat zien hoe u berichten kunt genereren in thread uitvoerformaat:

    adb logcat -v thread

    merk op dat u slechts één uitvoerformaat kunt opgeven met de optie -v, maar u kunt zoveel modifiers opgeven die zinvol zijn. Logcat negeert modifiers die geen zin hebben.

    Format modifiers

    Format modifiers wijzig de logcat-uitvoer in termen van een combinatie van een of meer van de volgende modifiers. Om een format modifier op te geven, gebruikt u de optie -v als volgt:

    adb logcat -b all -v color -d

    elk Android Logbericht heeft een tag en een prioriteit die eraan is gekoppeld. U kunt elke format modifier combineren met een van de volgende format opties: 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. Deze modifier beà nvloedt alleen gebeurtenislogbufferberichten en heeft geen effect op de andere niet-binaire buffers. De gebeurtenisbeschrijvingen komen uit de event-log-tags database.
    • epoch: weergavetijd in seconden vanaf 1 januari 1970.
    • monotonic: tijd weergeven in CPU seconden vanaf de laatste opstart.
    • printable: zorg ervoor dat binaire logging-inhoud is ontsnapt.
    • uid: indien toegestaan door toegangscontroles, Toon de UID of Android ID van het gelogde proces.
    • usec: Toon de tijd met precisie tot microseconden.
    • UTC: tijd weergeven als UTC.
    • year: voeg het jaar toe aan de weergegeven tijd.
    • zone: voeg de lokale tijdzone toe aan de weergegeven tijd.

    alternatieve logbuffers weergeven

    het Android-logboekregistratiesysteem houdt meerdere cirkelbuffers voor logberichten bij, en niet alle logberichten worden naar de standaard cirkelbuffer verzonden. Om extra logberichten te zien, kunt u de opdracht logcat uitvoeren met de optie -b om het bekijken van een alternatieve cirkelbuffer aan te vragen. U kunt elk van deze alternatieve buffers bekijken:

    • radio: bekijk de buffer die radio/Telefonie-gerelateerde berichten bevat.
    • events: bekijk de geïnterpreteerde bufferberichten voor binaire systeemgebeurtenissen.
    • main: bekijk de hoofdlogbuffer (standaard) bevat geen systeem-en crashlogberichten.
    • system: Bekijk de systeemlogbuffer (standaard).
    • crash: bekijk de crash log buffer (standaard).
    • all: alle buffers weergeven.
    • default: Reports mainsystem, en crash buffers.

    het gebruik van de optie -b is:

     logcat 

    Hier is een voorbeeld van het bekijken van een logbuffer met radio-en telefoonberichten:

    adb logcat -b radio

    U kunt ook meerdere -b vlaggen voor alle buffers die u wilt afdrukken, als volgt:

    logcat -b main -b radio -b events

    U kunt opgeven één -b vlag met een komma-gescheiden lijst van buffers, bijvoorbeeld:

    logcat -b main,radio,events

    Log van de code

    De Log class kunt u vermeldingen in de code dat wordt weergegeven in de logcat tool. De gemeenschappelijke methodes van het loggen omvatten:

    • 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

    Geef een antwoord

    Het e-mailadres wordt niet gepubliceerd.