Logcat komut satırı aracı

Logcat, aşağıdakiler dahil olmak üzere sistem mesajlarının günlüğünü tutan bir komut satırı aracıdır: ve mesajları kullanarak, Log sınıf.

Bu sayfa komut satırı logcat aracıyla ilgilidir, ancak günlüğü de görüntüleyebilirsiniz Android Studio'daki Logcat penceresinden mesajları. Örneğin, günlüklerin görüntülenmesi ve filtrelenmesi ile ilgili bilgiler, Daha fazla bilgi için Şunları içeren günlükleri görüntüleme ve yazma: Logcat'i seçin.

Günlük kaydı sistemine genel bakış

Android günlük kaydı sistemi, sistem tarafından tutulan bir dizi yapılandırılmış yuvarlak arabellektir. logd işlemini tamamlayın. Kullanılabilir tamponlar kümesi sabittir ve bahsedeceğim. En alakalı tamponlar şunlardır:

  • main: Çoğu uygulama günlüğünü depolar.
  • system: Android OS kaynaklı mesajları depolar.
  • crash: Kilitlenme günlüklerini depolar. Her günlük girişinin bir önceliği vardır. Bu, günlüğün kaynağını ve gerçek günlük mesajını görürsünüz.

Günlük kaydı sistemi için birincil C/C++ arayüzü, liblog paylaşılan kitaplığıdır ve <android/log.h> başlığı. Dile özgü tüm günlük kaydı tesisleri (android.util.Log dahil) ve daha sonra __android_log_write. Varsayılan olarak, __android_log_logd_logger, günlük girişini logd hedefine gönderir. giriş yaparsınız. API düzeyi 30'dan itibaren günlük kaydı işlevi, API düzeyi 30'u çağırarak değiştirilebilir. __android_set_log_writer Şuradan daha fazla bilgi edinebilirsiniz: NDK dokümanları.

adb logcat tarafından görüntülenen günlükler dört filtreleme düzeyinden geçer:

Derleme zamanı filtreleme
Derleme ayarlarına bağlı olarak bazı günlükler tamamen kaldırılır. Örneğin, ProGuard, alan adına yapılan aramaları Java kodundan Log.d.
Sistem özelliği filtreleme
liblog, şunun için bir sistem özelliği grubunu sorgular: logd adresine gönderilecek minimum önem düzeyini belirler. Günlüklerinizde MyApp etiketi, aşağıdaki özellikler kontrol edilir ve bunların en düşük önem derecesinin ilk harfini (V, D, I, Tüm günlükleri devre dışı bırakmak için W, E veya S):
  • log.tag.MyApp
  • persist.log.tag.MyApp
  • log.tag
  • persist.log.tag
Uygulama filtreleme
Özelliklerden hiçbiri ayarlanmazsa liblog, __android_log_set_minimum_priority. Varsayılan ayar: INFO
Görüntü filtreleme
adb logcat, şunları azaltabilecek ek filtreleri destekler: logd tarihinden itibaren gösterilen günlük sayısı. Bkz. filtreleme günlüğü çıkışını inceleyin.

Komut satırı söz dizimi

logcat öğesini adb kabuğunda çalıştırmak için genel kullanım şöyledir:

[adb] shell logcat [<option>] ... [<filter-spec>] ...

adb logcat ifadesinin de bir kısaltması var, ancak bu, adb shell logcat.

Seçenekler

logcat çok sayıda seçenek sunar. Kullanabileceğiniz seçenekler işletim sistemine bağlıdır sürümünü kullandığınızdan emin olun. Şuna özel logcat ile ilgili yardım için: aşağıdaki adımları uygulayın:

    adb logcat --help
    

logcat, OS geliştiricilerinin yanı sıra uygulama geliştiriciler için de bir araç olduğundan (Bunun yerine Android Studio'yu kullanması beklenen uygulama geliştiricilerinde) birçok seçenek yalnızca root olarak kullanılabilir.

Günlük çıkışını filtrele

Günlük mesajının etiketi, kaynaklandığı anlamına gelir. Örneğin, "Görünüm" görüntüleme sistemi için geçerli olur.

Öncelik, en düşükten en yükseğe doğru sıralanmış aşağıdaki karakter değerlerinden biridir öncelik:

    • V: Ayrıntılı (en düşük öncelik)
    • D: Hata ayıkla
    • I: Bilgi
    • W: Uyarı
    • E: Hata
    • F: Önemli
    • S: Sessiz (en yüksek öncelikli, hiçbir şey yazdırılmaz)
  • Sistemde önceliklerle kullanılan etiketlerin listesini almak için logcat ve her mesajın ilk iki sütununu gözlemleyin. Bu sütunlar <priority>/<tag>.

    Aşağıda,logcat logcat -v brief output komutudur. Çıkış, mesajın öncelik düzeyi "I" ve "ActivityManager" etiketini etiketleyin:

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

    Günlük çıkışını yönetilebilir bir düzeye indirmek için filtreyi kullanarak günlük çıkışını kısıtlayın ifadeleriyle iletişime geçebilirsiniz. Filtre ifadeleri sisteme etiket önceliğini belirtmenize olanak tanır farklı kombinasyonlara ekleyebilirsiniz. Sistem, diğer iletileri gizler. belirttiğiniz etiketler.

    Bir filtre ifadesi tag:priority ... biçimindedir (burada tag) ilgili etiketi, priority ise içeriğin minimum o etiket için raporlama önceliğine sahip değildir. Belirtilen öncelik veya önceliğin üzerindeki bu etiket için iletiler günlüğe yazılır. İstediğiniz sayıda tag:priority spesifikasyonu tek bir filtre ifadesi kullanın. Spesifikasyonlar dizisi boşlukla sınırlandırılmıştır.

    Aşağıda, şunun hariç tüm günlük iletilerini gizleyen bir filtre ifadesi örneği verilmiştir: "ActivityManager" etiketine sahip olanlar "Bilgi" veya üstü ve etikete sahip olanlar "Uygulamam" "Hata ayıkla" öncelikli veya üzeri:

    adb logcat ActivityManager:I MyApp:D *:S
    

    Önceki ifadedeki son öğe (*:S), tüm etiketleri "silent" olarak ayarlayın. Bu, mesajların yalnızca "ActivityManager" ile günlüğe kaydedilmesini sağlar. ve "MyApp" şunlardır: görüntülenir. *:S kullanılması, günlük çıkışının açıkça belirttiğiniz filtreler. *:S, filtrelerinizin izin verilenler listesidir.

    Not: Bazı kabuklarda "*" karakteri, kabuk tarafından ayrılmıştır. Şu durumda: bir kabuk kullanıyorsanız filtre ifadesini tırnak içine alın: adb logcat "ActivityManager:I MyApp:D *:S"

    Aşağıdaki filtre ifadesi, öncelik düzeyinde "uyarı" içeren tüm günlük mesajlarını gösterir ve tüm etiketlerde daha yüksek olacaktır:

    adb logcat *:W
    

    logcat uygulamasını bir bilgisayarda çalıştırmak yerine geliştirme bilgisayarınızda çalıştırıyorsanız uzak adb kabuğunun içindeki bir değeri dışa aktararak varsayılan bir filtre ortam değişkeni ANDROID_LOG_TAGS:

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

    ANDROID_LOG_TAGS filtresi emülatöre/cihaza aktarılmaz. Örneğin, uzak kabuktan logcat çalıştırıyorsanız veya adb shell logcat kullanıyorsanız.

    Kontrol günlüğü çıkış biçimi

    Günlük iletileri, etiket ve önceliğe ek olarak çeşitli meta veri alanları içerir. Şunları yapabilirsiniz: belirli bir meta veri alanını görüntüleyecek şekilde mesajların çıkış biçimini değiştirin. Bunun için, -v seçeneğini kullanın ve aşağıdaki desteklenen çıkış biçimlerinden birini belirtin:

    • brief: mesajını alırsınız.
    • long: Tüm meta veri alanlarını ve iletileri boş olarak ayrı ayrı gösterir satırlarda ilerleyin.
    • process: Yalnızca PID'yi gösterir.
    • raw: Ham günlük mesajını, başka meta veri alanları olmadan gösterir.
    • tag: Yalnızca önceliği ve etiketi gösterir.
    • thread: Şunun önceliğini, PID'sini ve TID'sini gösteren eski bir biçimdir: ve iletiyi veren iş parçacığı.
    • threadtime (varsayılan): Tarihi, çağrı zamanını, önceliği, etiketi, PID'yi ve TID'yi içerir.
    • time: Anahtar kelimenin tarihini, çağrı zamanını, önceliğini, etiketini ve PID'sini mesajı görebilirsiniz.

    logcat başlatılırken -v seçeneği:

    [adb] logcat [-v <format>]
    

    thread çıkışında nasıl mesaj oluşturulacağını gösteren bir örneği aşağıda bulabilirsiniz biçim:

    adb logcat -v thread
    

    -v seçeneğiyle yalnızca bir çıkış biçimi belirtebilirsiniz. Ancak, mantıklı olduğu sürece istediğiniz kadar değiştirici belirtebilirsiniz. logcat. anlamsız değiştiricileri yok sayar.

    Biçim değiştiriciler

    Biçim değiştiriciler, logcat çıkışını değiştirir. Biçim değiştirici belirtmek için -v seçeneğini aşağıdaki şekilde kullanın:

    adb logcat -b all -v color -d
    

    Her Android günlük mesajının kendisiyle ilişkilendirilen bir etiketi ve önceliği vardır. Herhangi bir biçim değiştiriciyi, aşağıdaki biçim seçeneklerinden herhangi biriyle birleştirebilirsiniz:

    • brief
    • long
    • process
    • raw
    • tag
    • thread
    • threadtime
    • time

    Aşağıdaki değiştirici ayrıntılarını biçimlendirmek için şunu girin: logcat -v --help komut satırından ekleyin:

    • color: Her öncelik düzeyini farklı bir renkle gösterir.
    • descriptive: Günlük arabellek etkinliği açıklamalarını gösterir. Bu değiştirici etkinliği etkiler yalnızca arabellek mesajlarını günlüğe kaydeder ve diğer ikili olmayan arabellekler üzerinde herhangi bir etkisi yoktur. Etkinlik açıklamaları event-log-tags veritabanından alınır.
    • epoch: 1 Ocak 1970'ten itibaren zamanı saniye cinsinden gösterir.
    • monotonic: Son başlatmadan itibaren süreyi CPU saniye cinsinden gösterir.
    • printable: İkili program günlük kaydı içeriğinden çıkış yapılmasını sağlar.
    • uid: Erişim denetimleri tarafından izin verilirse ilgili öğenin UID veya Android kimliğini günlüğe kaydetmelidir.
    • usec: Saati, mikrosaniye cinsinden hassasiyetle gösterir.
    • UTC: Saati UTC olarak gösterir.
    • year: Yılı, gösterilen zamana ekler.
    • zone: Yerel saat dilimini, görüntülenen saate ekler.

    Alternatif günlük arabelleklerini göster

    Android günlük kaydı sistemi, günlük mesajları için birden fazla yuvarlak arabellek tutar. Bu arabelleklerin günlük mesajları varsayılan dairesel arabelleğe gönderilir. Ek günlük mesajlarını görmek için: bir dokümanın görüntülenmesini istemek için -b seçeneğiyle birlikte logcat komutunu tampon görevi görür. Şu alternatif tamponlardan herhangi birini görüntüleyebilirsiniz:

    • radio: Radyo/telefonla ilgili içeren arabelleği görüntüler mesaj.
    • events: Yorumlanan ikili sistem etkinliği arabellek mesajlarını görüntüler.
    • main: Aşağıdaki değeri içermeyen ana günlük arabelleğini (varsayılan) görüntüler sistem ve kilitlenme günlüğü e-postaları için de geçerlidir.
    • system: Sistem günlük arabelleğini görüntüler (varsayılan).
    • crash: Kilitlenme günlüğü arabelleğini görüntüler (varsayılan).
    • all: Tüm tamponları görüntüler.
    • default: Raporlar main, system ve crash arabellek.

    -b seçeneğinin kullanımı:

    [adb] logcat [-b <buffer>]
    

    Aşağıda, radyo ve telefon mesajları içeren bir günlük arabelleğinin nasıl görüntüleneceğine ilişkin bir örnek verilmiştir:

    adb logcat -b radio
    

    Yazdırmak istediğiniz tüm arabellekler için birden fazla -b işareti belirtmek üzere aşağıdakileri girin:

    logcat -b main -b radio -b events
    

    Virgülle ayrılmış arabellek listesiyle tek bir -b işareti belirtin. örneğin:

    logcat -b main,radio,events
    

    Koddan günlük yap

    Log sınıfıyla içerik oluşturabilirsiniz. koddaki logcat aracında görüntülenen günlük girişleridir. Yaygın günlük kaydı yöntemleri şunlardır:

    Örneğin, aşağıdaki çağrıyı kullanarak:

    Kotlin

    Log.i("MyActivity", "MyClass.getView() — get item number $position")
    

    Java

    Log.i("MyActivity", "MyClass.getView() — get item number " + position);
    

    logcat aşağıdakine benzer bir sonuç verir:

    I/MyActivity( 1557): MyClass.getView() — get item number 1