Maybaygiare.org

Blog Network

Logcat-komentorivityökalu

Logcat on komentorivityökalu, joka kaataa lokin järjestelmäsanomia, mukaan lukien pinon jälkiä, kun laite heittää virheen, ja viestejä, jotka olet kirjoittanut sovelluksestasiLog Luokka.

Tämä sivu käsittelee komentorivin logcat-työkalua, mutta Logmessageja voi tarkastella myös Android Studion Logcat-ikkunasta. Lisätietoja katselu ja suodatus lokit Android Studio,katso kirjoittaa ja katsella lokit withLogcat.

Logging system overview

Android logging system on joukko järjestelmäprosessin ylläpitämiä jäsenneltyjä pyöreitä puskureita logd. Järjestelmä vahvistaa ja määrittelee käytettävissä olevat Puskurit. Oleellisimmat ovat: main, joka tallentaa useimmat sovelluslokit, system, joka tallentaa Android-käyttöjärjestelmästä peräisin olevia viestejä, ja crash, joka tallentaa kaatumislokeja. Jokaisella lokimerkinnällä on prioriteetti (yksi VERBOSEDEBUGINFOWARNINGERROR tai FATAL), tunniste, joka tunnistaa lokin alkuperän ja varsinaisen lokiviestin.

ensisijainen rajapinta lokijärjestelmään on jaettu kirjasto liblog ja sen otsikko <android/log.h>. Kaikki Kielikohtaiset kirjauslaitokset kutsuvat lopulta funktiota __android_log_write. Oletuksena se kutsuu funktiota __android_log_logd_logger, joka lähettää lokimerkinnän logd pistoketta käyttäen. API-tasosta 30 alkaen lokitoimintoa voi muuttaa kutsumalla __android_set_log_writer. Lisätietoja on saatavilla NDK: n dokumentaatiosta.

adb logcat näyttävät lokit käyvät läpi neljä suodatustasoa:

  1. Compile-time-suodatus: koosteasetuksista riippuen jotkin lokit voidaan poistaa kokonaan binääristä. Proguard voidaan konfiguroida esimerkiksi poistamaan kutsut Log.d Java-koodista.
  2. järjestelmän ominaisuussuodatus: liblog tiedustelee järjestelmän ominaisuuksien joukkoa määrittääkseen sille lähetettävän vähimmäisvahvuustason logd. Jos lokissa on tunniste MyApp, seuraavat ominaisuudet tarkistetaan ja niiden oletetaan sisältävän ensimmäisen kirjaimen vähimmäisvakavuuden (VDIIWE, taiS kaikkien lokkien poistaminen käytöstä):
  • log.tag.MyApp
  • persist.log.tag.MyApp
  • log.tag
  • persist.log.tag

  • sovelluksen suodatus: Jos mitään ominaisuuksista ei ole asetettu, liblog käyttää __android_log_set_minimum_priorityasettamaa minimiprioriteettia. Oletusasetus on INFO.
  • Näyttösuodatus: adb logcat tukee lisäsuodattimia, joilla voidaan vähentää logdnäytettyjen lokien määrää. Katso alta tarkemmat tiedot.
  • komentorivin syntaksi

    logcatin ajamiseksi adb-komentotulkin läpi yleinen käyttö on:

     logcat ... ...

    voit ajaa logcat adb-käskynä tai suoraan emulaattorin tai liitetyn laitteen komentotulkkikehotteessa. Jos haluat tarkastella lokitulostetta adb: llä, siirry SDK: Hon platform-tools/ hakemistoon ja suorita:

    adb logcat

    For logcat online-ohje, käynnistä laite ja suorita sitten:

    adb logcat --help

    voit luoda KOMENTOTULKKIYHTEYDEN laitteeseen ja suorittaa:

    $ adb shell# logcat

    vaihtoehdot

    seuraava taulukko kuvaa logcatkomentorivivalintoja.

    Lataa vaihtoehtoinen lokipuskuri katseltavaksi, kuten eventstairadiomainsystem ja crash puskurijoukko on oletusarvoisesti käytössä. Katso Vaihtoehtoisten Lokipuskureiden Esittely.

    /tr>

    Option kuvaus
    -b <buffer>
    -c, --clear Tyhjennä (huuhtele) valitut Puskurit ja poistu. Oletuspuskurijoukko on mainsystem ja crash. Poista kaikki Puskurit käyttämällä -b all -c.
    -e <expr>, --regex=<expr> vain tulostusviivat, joissa lokiviesti vastaa <expr>jossa<expr>on säännöllinen lauseke. -m <count>, --max-count=<count> lopeta tulostamisen jälkeen <count>rivien lukumäärä. Tämä on tarkoitettu pariksi --regex, mutta toimii omillaan. --print pariksi --regexja--max-count, jotta sisältö ohittaa regex-suodattimen, mutta pysähtyy silti oikeaan osumamäärään.
    -d dumppaa loki näytölle ja poistuu.
    -f <filename> Kirjoita lokiviestin lähtö <filename>. Oletusarvo on stdout.
    -g, --buffer-size tulosta määritetyn lokipuskurin ja uloskäyntien koko.
    -n <count> Aseta käännettyjen lokien enimmäismäärä <count>. Oletusarvo on 4. Vaatii -r – vaihtoehdon.
    -r <kbytes> Kierrä lokitiedostoa joka <kbytes> tulosteesta. Oletusarvo on 16. Vaatii -f – vaihtoehdon.
    -s vastaa suodatinlauseketta '*:S', joka asettaa kaikkien tagien tärkeysjärjestyksen äänettömäksi, ja sitä käytetään edeltämään luetteloa sisältöä lisäävistä suodatuslausekkeista. Lisätietoja, mene osio suodatus lokitiedoston.
    -v <format> Aseta lokiviestien tulostemuoto. Oletusarvo on threadtime format. Jos haluat luettelon tuetuista formaateista, siirry kohtaan Ohjauslokin tulostusmuoto.
    -D, --dividers tulosta jakajat jokaisen lokipuskurin välillä.
    -c huuhtele (Tyhjennä) koko loki ja poistu.
    -t <count> tulosta vain viimeisin rivimäärä. Tämä vaihtoehto sisältää -d toiminnallisuuden.
    -t '<time>' tulosta viimeisimmät rivit määritetyn ajan jälkeen. Tämä vaihtoehto sisältää -d toiminnallisuuden. Katso-P-valitsimesta lisätietoja parametrien lainaamisesta upotetuilla välilyönneillä.

    adb logcat -t '01-26 20:52:41.820'
    -T <count> tulosta viimeisin rivimäärä määritetyn ajan jälkeen. Tämä valinta ei sisällä -d toiminnallisuus
    -T '<time>' tulosta viimeisimmät rivit määritetyn ajan jälkeen. Tämä vaihtoehto ei sisällä include -d toiminnallisuus. Katso-P-valitsimesta lisätietoja parametrien lainaamisesta upotetuilla välilyönneillä.

    adb logcat -t '01-26 20:52:41.820'
    -L, -last dumppasi lokit ennen viimeistä uudelleenkäynnistystä.
    -B, --binary tulosta loki binäärimuodossa.
    -S, --statistics Sisällytä tulosteeseen tilastoja, joiden avulla voit tunnistaa ja kohdentaa loki-roskapostittajia.
    -G <size> Aseta lokirengaspuskurin koko. Voidaan lisätä K tai M loppuun kilotavua tai megatavua.
    -p, --prune Print (read) the current allow (white) and deny (black) luettelee eikä ota vastaan argumentteja seuraavasti:

    adb logcat -p
    -P '<list> ...'
    --prune '<list> ...' -P '<white_and_black_list>'
    write (set) the allow (white) and deny (blacksisällön kirjaaminen tiettyyn tarkoitukseen. Annat sekalaisen sisällön sallituista (<white>) ja kielletyistä (~<black>) luettelotiedoista, joissa <white> tai <black> voi olla UID, UID/PID tai /PID. Logcat-tilastoista (logcat -S) saatujen ohjeiden perusteella voidaan harkita mukautuksia allow (white) ja deny (black) – luetteloihin esimerkiksi seuraavia tarkoituksia varten:

    • antaa tietyn lokisisällön pitkäikäisimmäksi UID-valintojen kautta.
    • Estä jotakuta (UID) tai jotain (PID) kuluttamasta näitä resursseja lisätäksesi logspania, jotta saat enemmän näkyvyyttä diagnosoitaviin ongelmiin.

    oletusarvoisesti lokijärjestelmä estää automaattisesti lokitilaston pahinta rikkojaa tekemästä dynaamisesti tilaa uusille lokiviesteille. Kun heuristiikka on käytetty loppuun, järjestelmä karsii vanhimmat merkinnät tehdäkseen tilaa uusille viesteille.

    sallitun listan lisääminen (whitelist) Suojaa Android-Tunnistenumerosi (AID), josta tulee prosessien tuki ja GID rikoksentekijäksi julistamiselta, ja denylistin lisääminen auttaa vapauttamaan tilaa ennen kuin pahimmat rikoksentekijät otetaan huomioon. Voit valita, kuinka aktiivinen karsinta on, ja voit poistaa karsinnan, joten se poistaa sisällön vain vanhimmista lokipuskurista.

    lainausmerkit

    adb logcat ei säilytä lainausmerkkejä, joten syntaksi allow (white) ja deny (black) – listojen täsmentämiseksi on seuraava:

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

    seuraavassa esimerkissä on sallittu (white) luettelo pid 32676: lla ja uid 675: llä, ja estävä (black) luettelo PID 32677: llä ja uid 897: llä. PID 32677 denylistillä painotetaan nopeampaan karsintaan.

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

    muut salli (white) ja estä (black) listan komennon muunnelmat joita voit käyttää ovat seuraavat:

    ~! worst uid blacklist~1000/! worst pid in system (1000)
    --pid=<pid> ... tulostaa vain lokit annetusta PID: stä.
    --wrap lepää 2 tuntia tai kun puskuri on pakenemassa kumpi tulee ensin. Parantaa tehokkuutta gallups tarjoamalla Noin-to-wrap herätys.

    suodatus log output

    • lokiviestin tunniste on lyhyt merkkijono, joka ilmaisee järjestelmän komponentin, josta viesti on lähtöisin (esimerkiksi ”View” näkymäjärjestelmälle).
    • prioriteetti on jokin seuraavista merkkiarvoista alimmasta korkeimpaan prioriteettiin järjestettynä:
      • V: Verbose (alin prioriteetti)
    • D: Debug
    • I: info
    • W: Varoitus
    • E: virhe
    • F: kohtalokas S: Hiljainen (korkein prioriteetti, johon ei koskaan paineta mitään)

    voit saada luettelon järjestelmässä käytetyistä tageista tärkeysjärjestyksineen ajamalla logcat: in ja tarkkailemalla kunkin viestin kahta ensimmäistä saraketta, jotka annetaan <priority>/<tag>.

    Seuraavassa on esimerkki lyhyestä logcat-tulosteesta, joka on saatu logcat -v brief output – komennolla. Se osoittaa, että viesti liittyy prioriteettitasoon ” I ”ja tagiin ”ActivityManager”:

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

    log-ulostulon vähentämiseksi hallittavalle tasolle voit rajoittaa lokitulostetta suodatinlausekkeilla. Suodinlausekkeiden avulla voit ilmoittaa järjestelmälle tagit-prioriteettiyhdistelmät — joista olet kiinnostunut-järjestelmä estää muita viestejä määritetyille tageille.

    suodatinlauseke noudattaa tätä muotoa tag:priority ..., jossa tag ilmoittaa kiinnostavan merkin ja priority ilmoittaa kyseisen merkinnän raportoitavan prioriteetin vähimmäistason. Kyseisen tunnisteen viestit määritetyllä prioriteetilla tai sen yläpuolella kirjoitetaan lokiin. Voit antaa minkä tahansa määrän tag:priority määrityksiä yhdellä suodatinlausekkeella. Määritysten sarja on tyhjämerkit-rajattu.

    tässä on esimerkki suodatinlausekkeesta, joka estää kaikki lokiviestit paitsi ne, joissa on merkintä ”ActivityManager”, prioriteetilla ”Info” tai sen yläpuolella, ja kaikki lokiviestit, joissa on tagi ”MyApp”, prioriteetilla ”Debug” tai yläpuolella:

    adb logcat ActivityManager:I MyApp:D *:S

    yllä olevan lausekkeen viimeinen elementti, *:S, asettaa kaikkien tagien prioriteettitason ”hiljaiseksi”, jolloin näytetään vain lokiviestit, joissa on ”ActivityManager” ja ”MyApp”. Käyttämällä *:S on erinomainen tapa varmistaa, että lokituotos on rajoitettu suodattimiin, jotka olet nimenomaisesti määrittänyt — se antaa suodattimiesi toimia sallituslistana lokituotokselle.

    seuraavassa suodatinlausekkeessa näytetään kaikki lokiviestit, joiden prioriteettitaso on” varoitus ” ja korkeampi, kaikissa tageissa:

    adb logcat *:W

    Jos suoritat logcat: ia kehitystietokoneeltasi (vs. suoritat sitä etänä adb-komentotulkilla), voit myös asettaa oletussuodattimen lausekkeen viemällä ympäristömuuttujalle arvon ANDROID_LOG_TAGS:

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

    huomaa, että ANDROID_LOG_TAGS suodatinta ei viedä emulaattori/laite-instanssiin, jos käytät logcatia etätulkilta tai käytät adb shell logcat.

    Ohjauslokin tulostusmuoto

    lokiviestit sisältävät tunnisteen ja prioriteetin lisäksi useita metatietokenttiä. Voit muokata viestien esitysmuotoa niin, että ne näyttävät tietyn metatietokentän. Tätä varten voit käyttää -v – valintaa ja määrittää jonkin alla luetelluista tuetuista tulostusmuodoista.

    • brief: Näytä viestin antavan prosessin prioriteetti, tunniste ja PID.
    • long: Näytä kaikki metatietokentät ja erilliset viestit tyhjillä riveillä.
    • process: Näytä vain PID.
    • raw: Näytä raaka lokiviesti ilman muita metatietokenttiä.
    • tag: Näytä vain prioriteetti ja tunniste.
    • thread: vanha muoto, joka näyttää viestin antavan säikeen prioriteetin, PID: n ja TID: n.
    • threadtime (oletusarvo): Näytä viestin antavan säikeen päivämäärä, kutsuaika, prioriteetti, tagi, PID ja TID.
    • time: Näytä viestin antavan prosessin päivämäärä, kutsuaika, prioriteetti, tunniste ja PID.

    kun käynnistät logcat: in, voit määrittää haluamasi tulostusmuodon käyttämällä -v option:

     logcat 

    tässä on esimerkki, joka näyttää, miten viestit luodaan thread tulostusmuoto:

    adb logcat -v thread

    huomaa, että -v – valinnalla voi määrittää vain yhden esitysmuodon, mutta voit määrittää niin monta muokkaajaa, joissa on järkeä. Logcat jättää huomiotta modifioijat, joissa ei ole järkeä.

    Format modifiers

    Format modifiers muuttaa logcat-tulostetta yhden tai useamman seuraavan modifierin yhdistelmänä. Jos haluat määrittää format modifierin, käytä -v valitsinta seuraavasti:

    adb logcat -b all -v color -d

    jokaisessa Android-lokiviestissä on tunniste ja siihen liittyvä prioriteetti. Voit yhdistää minkä tahansa format modifierin mihin tahansa seuraavista formaattivaihtoehdoista: 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. Tämä muokkaaja vaikuttaa vain tapahtumalokipuskuriviesteihin, eikä sillä ole vaikutusta muihin ei-binäärisiin puskureihin. Tapahtumakuvaukset tulevat event-log-tags-tietokannasta.
    • epoch: Näyttöaika sekunneissa alkaen 1.tammikuuta 1970.
    • monotonic: Näyttöaika SUORITINSEKUNTEINA viimeisestä käynnistyksestä alkaen.
    • printable: varmista, että binäärinen kirjaussisältö karkaa.
    • uid: jos käyttöoikeuksien valvonta sallii, Näytä kirjautuneen prosessin UID-tai Android-tunnus.
    • usec: Näytä aika tarkasti mikrosekunteihin asti.
    • UTC: Näyttöaika UTC: nä.
    • year: lisätään vuosi näytettyyn aikaan.
    • zone: lisätään paikallinen aikavyöhyke näytettyyn aikaan.

    vaihtoehtoisten lokipuskureiden katselu

    Android-lokijärjestelmä pitää lokiviesteille useita pyöreitä puskureita, eikä kaikkia lokiviestejä lähetetä oletuspuskuriin. Jos haluat nähdä ylimääräisiä lokiviestejä, voit suorittaa logcat – komennon -b – valinnalla, jolloin voit pyytää vaihtoehtoisen ympyräpuskurin katselua. Voit tarkastella mitä tahansa näistä vaihtoehtoisista puskureista:

    • radio: Tarkastele puskuria, joka sisältää radio – / puhelinviestejä.
    • events: Katso tulkitut binäärijärjestelmän tapahtumapuskurisanomat.
    • main: Näytä päälokipuskuri (oletusarvo) ei sisällä järjestelmän ja kaatumisen lokiviestejä.
    • system: Näytä järjestelmälokipuskuri (oletus).
    • crash: Näytä kaatumislokipuskuri (oletusarvo).
    • all: Katso kaikki Puskurit.
    • default: Reports mainsystem, ja crash Puskurit.

    -b vaihtoehto on:

     logcat 

    tässä on esimerkki siitä, miten radio-ja puhelinviestejä sisältävää lokipuskuria voi tarkastella:

    adb logcat -b radio

    voit myös määrittää useita -b lippuja kaikille tulostettaville puskureille seuraavasti:

    logcat -b main -b radio -b events

    voit määrittää yhden -b lipun, jossa on pilkulla erotettu puskuriluettelo, esimerkiksi:

    logcat -b main,radio,events

    kirjautuminen koodista

    Log Luokka mahdollistaa lokimerkintöjen luomisen koodiin, joka näkyy logcat-työkalussa. Yleisiä hakkuutapoja ovat:

    • 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

    Vastaa

    Sähköpostiosoitettasi ei julkaista.