Logcat, ADB veya Android Studio'nun yerleşik konsolu üzerinden kullanılabilen, sistem mesajlarını ve uygulama loglarını gerçek zamanlı olarak görüntülemek için bir Android SDK aracıdır. Android Developers'a göre Logcat, sistemdeki tüm süreçlerden mesajları toplar, bunları önem seviyelerine ve etiketlere göre filtreler ve geliştiricinin hataları teşhis etmesine, kod yürütmeyi izlemesine ve performansı analiz etmesine olanak tanır. Logcat, Android uygulamalarında hata ayıklarken birincil bilgi kaynağıdır.
Kilit noktalar
Logcat, tüm süreçlerin (Linux çekirdeği, system_server ve uygulamalar dahil) belirli bir biçimde mesaj yazdığı bir Android sistem arabelleğidir. Android SDK'ya dahil olan logcat aracı, bu arabelleği okur ve mesajları gerçek zamanlı olarak görüntüler. Android 4.1'den (API 16) itibaren Logcat'e erişim kısıtlıdır: uygulamalar yalnızca kendi loglarını okuyabilir ve sistem loglarına hata ayıklama erişimi olan ADB aracılığıyla erişilebilir.
Her Logcat mesajı beş alan içerir: tarih ve saat, PID (süreç tanımlayıcı), TID (iş parçacığı tanımlayıcı), log seviyesi ve etiket. Biçim sabittir ve tüm Android sürümlerinde aynıdır. Bu, IDE bağımlılığı olmadan CI/CD hatlarında log filtreleme için grep, awk ve sed yardımcı programlarının kullanılmasına olanak tanır.
Loglar sabit boyutlu bir halka arabellekte depolanır: main için 256 KB, system için 256 KB ve events için 256 KB (Android 5+). Arabellek taştığında eski mesajlar silinir. Geliştirici, PROP logcat.size özelliği veya cihazın geliştirici seçenekleri aracılığıyla arabellek boyutunu değiştirebilir.
Altı seviye loglama, mesajın önemini belirler. Android, diğer platformlara benzer standart seviyeler kullanır, ancak Log sınıfında kendi sabit adlarına sahiptir. Doğru seviyeyi seçmek, logları verimli bir şekilde filtrelemeye ve kritik mesajların ikincil mesajlar arasında kaybolmasını önlemeye yardımcı olur.
| Seviye | Sabit | Amaç | Varsayılan olarak gösterilir |
|---|---|---|---|
| VERBOSE | Log.v | Maksimum ayrıntılı hata ayıklama bilgisi | Hayır |
| DEBUG | Log.d | Geliştirici için hata ayıklama mesajları | Hayır |
| INFO | Log.i | Uygulama çalışması hakkında bilgilendirme mesajları | Evet |
| WARN | Log.w | Potansiyel sorunlar hakkında uyarılar | Evet |
| ERROR | Log.e | Kritik hatalar ve istisnalar | Evet |
| ASSERT | Log.wtf | Prensipte asla olmaması gereken hatalar | Evet |
Etiket (tag) — mesajın kaynağını tanımlayan en fazla 23 karakterlik bir dizedir. Etiket olarak sınıf veya modül adının kullanılması önerilir: MainActivity, AuthManager, NetworkModule. Bu, uygulamanın belirli bir bileşenine göre logları filtrelemeye olanak tanır. Ekip içinde tutarlılık için ayrı bir dosyada etiket sabitleri oluşturabilir veya sınıf adına göre otomatik olarak etiket ekleyen Timber kütüphanesini kullanabilirsiniz.
İşlenmemiş bir istisna oluştuğunda, Android otomatik olarak Logcat'e sınıfı, yöntemi, kod satırını ve çağrı zincirini belirten tam stack trace'i yazar. Çökme logu, istisna türünü (NullPointerException, RuntimeException), mesajı ve çökme noktasından uygulamanın giriş noktasına kadar çağrı sırasını içerir. Kullanıcı cihazlarından çökme loglarını analiz etmek için, stack trace'i karıştırma haritasıyla (Android için mapping.txt) senkronize eden Firebase Crashlytics kullanılır.
Android Studio, View → Tool Windows → Logcat (Alt + 6) üzerinden erişilebilen grafiksel bir Logcat arayüzü sağlar. Logcat penceresi gerçek zamanlı olarak güncellenir, bağlı cihazdaki tüm mesajları gösterir ve genel akıştan istenen bilgileri ayırmak için esnek filtreler yapılandırmaya olanak tanır.
Log Level açılır menüsü, mesajları minimum seviyeye göre filtreler: yalnızca uyarıları ve hataları görmek için WARN seçeneğini seçin, VERBOSE, DEBUG ve INFO'yu gizler. Arama alanı, mesaj metni veya etikete göre arama yapılmasını sağlar — regex desteklenir, bu da desene göre mesaj bulmak için kullanışlıdır.
Saved Filters, Android Studio'da Logcat'in güçlü bir özelliğidir. Yalnızca uygulamanızın etiketine (tag:MyApp) ve WARN+ seviyesine sahip mesajları gösteren bir filtre oluşturabilirsiniz. Filtreler oturumlar arasında korunur ve açılır listeden kullanılabilir. Birden çok modüllü projeler için her modül için ayrı bir filtre oluşturun.
# Uygulama loglarını filtrelemek için örnek ifade
tag:"MyApp" level:WARN # MyApp için yalnızca WARN+
package:"com.mycompany" # Paketin tüm logları
-tag:"okhttp" # OkHttp loglarını hariç tut
Logcat logları, Save to File simgesi aracılığıyla bir metin dosyasına dışa aktarılabilir. Bu, Jira'daki biletlere eklemek veya uzun oturumları analiz etmek için kullanışlıdır. Dışa aktarılan log, herhangi bir metin düzenleyicide açılabilir ve desen aramak için grep uygulanabilir. Biçimlendirilmiş görüntüleme için logcat-color yardımcı programını kullanın.
ADB logcat, Android Debug Bridge aracılığıyla erişilebilen Logcat'in konsol sürümüdür. Ana avantajı, CI sunucularında, otomasyon betiklerinde ve Android Studio olmayan cihazlarda çalıştırılabilmesidir. ADB logcat, GUI ile aynı filtrelerin tümünü destekler, ancak komut satırı esnekliği ile.
adb logcat komutu, bağımsız değişken olmadan tüm arabelleği gerçek zamanlı olarak çıkarır. Durdurmak için Ctrl+C kullanın. -c bayrağı, kayda başlamadan önce arabelleği temizler — mevcut testin loglarını önceki mesajlardan ayırmanız gerektiğinde kullanışlıdır. -b bayrağı, arabellek türünü seçer: main, system, events, crash (Android 12+).
# Arabelleği temizle ve MyApp etiketiyle log kaydını başlat
adb logcat -c
adb logcat MyApp:D *:S
# Logları dosyaya kaydet
adb logcat -d > logcat_dump.txt
# Süreç PID'sine göre filtreleme
adb logcat --pid=12345
ADB'yi Unix yardımcı programlarıyla birleştirmek maksimum esneklik sağlar. Örneğin, "*:S TAG:D" filtresi yalnızca TAG etiketine sahip DEBUG seviyesi ve üzerindeki mesajları gösterir, diğerlerini gizler. Yalnızca istisnaları görmek için grep -i exception kullanın. Hata sıklığını analiz etmek için etiket sütununda sort | uniq -c uygulayın.
CI sunucularında Logcat, UI testleri çalıştırılırken tanılama toplamak için kullanılır. Tipik bir iş hattı: testleri çalıştırmadan önce arabelleği temizleyin, test yürütmesinden sonra log dökümünü derleme yapıtı olarak kaydedin. Bir test başarısız olursa, loglar başarısızlığın ANR, işlenmemiş istisna veya ağ zaman aşımından kaynaklanıp kaynaklanmadığını belirleyebilir.
android.util.Log sınıfı, Logcat'e mesaj yazmak için yerleşik API'dir. Log.v, Log.d, Log.i, Log.w, Log.e ve Log.wtf, bir etiket (dize) ve bir mesaj (dize) veya mesaj + Throwable kabul eder. Mesajları biçimlendirmek için String.format veya Kotlin dize şablonlarını kullanın — yığında gereksiz nesneler oluşturan dize birleştirmeden kaçının.
Timber, Jake Wharton tarafından geliştirilen, yerleşik Log API'nin eksikliklerini gideren popüler bir kütüphanedir. Timber, loglamayı çağıran sınıfın adına göre etiketi otomatik olarak ekler ve her çağrıda bir etiket iletilmesini gerektirmez. Timber ayrıca koşullu loglamayı da destekler: Release yapılarında Timber.v ve Timber.d çağrıları, Application.onCreate'da tek bir satırla devre dışı bırakılabilir.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Yerleşik Log API
Log.d("MainActivity", "onCreate called")
// Timber — sınıf adına göre otomatik etiket
Timber.d("onCreate called")
}
private fun loadData() {
try {
val result = fetchFromNetwork()
Timber.i("Data loaded: $result")
} catch (e: IOException) {
Timber.e(e, "Failed to load data")
}
}
}
Release yapılarında, Logcat arabelleği yükünü azaltmak ve hassas bilgi sızıntısını önlemek için VERBOSE ve DEBUG loglarının devre dışı bırakılması önerilir. Timber bu sorunu PlantingTree ile çözer: Debug çeşnisinde DebugTree ekilir (her şeyi kaydeder), Release'te — CrashReportingTree (yalnızca Crashlytics aracılığıyla ERROR kaydeder). Yerleşik Log API koşullu loglamayı desteklemez — geliştiricinin her çağrıyı if (BuildConfig.DEBUG) ile sarması gerekir.
Sıkça Sorulan Sorular
Testi çalıştırmadan önce adb logcat -c komutunu kullanın. Alternatif olarak Android Studio'da Logcat penceresindeki Clear Logcat düğmesine (çöp kutusu) tıklayın. Temizleme, diğer süreçlerin sistem arabelleklerini etkilemez, yalnızca mevcut bağlantıyı etkiler.
Arabelleği 2 MB'a çıkarmak için adb logcat -G 2M komutunu çalıştırın. Maksimum boyut cihaza bağlıdır: Android 10+ üzerinde 16 MB'a kadar kullanılabilir. Değişiklik, cihaz yeniden başlatılana kadar kalıcı olur. Kalıcı yapılandırma için device tree içindeki build.prop'u kullanın.
Olası nedenler: uygulama Release modunda çalışıyor (Timber.v/d logları devre dışı), Logcat filtresi gerekli seviyeyi gizliyor veya yanlış cihaza bağlandınız. Ayrıca Android Studio'da uygulamanın sürecini seçtiğinizi kontrol edin, system_process değil.
FATAL EXCEPTION içeren satırı bulun, altında tam stack trace bulunur. İlk satır istisna türünü ve mesajını içerir, sonraki satırlar dosya ve kod satırı bilgisiyle çağrı zincirini içerir. Tüm loglar arasında hızlı arama için grep "FATAL EXCEPTION" kullanın.
ANR (Application Not Responding), ana iş parçacığının (UI iş parçacığı) 5 saniyeden fazla bloke olduğu bir durumdur. Logcat'te ANR, ActivityManager etiketi ve "ANR in ..." metniyle birlikte tüm iş parçacıklarının stack trace'i eklenmiş bir mesaj olarak görünür. tag:ActivityManager level:ERROR filtresini kullanın.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun