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üklerinizdeMyApp
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çinW
,E
veyaS
):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ıklaI
: BilgiW
: UyarıE
: HataF
: ÖnemliS
: 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
: Raporlarmain
,system
vecrash
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:
Log.v(String, String)
(ayrıntılı)Log.d(String, String)
(hata ayıklama)Log.i(String, String)
(bilgi)Log.w(String, String)
(uyarı)Log.e(String, String)
(hata)
Ö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