Logcat — nedir, loglama seviyeleri ve loglarla çalışma

Yazar: IT Sectr Yayınlanma: 2026-05-06 Okuma süresi: 8 dk

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 — Android Studio'da Android sistem loglarını gerçek zamanlı görmek için konsol penceresi
  • Log seviyeleri — VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT — mesajın önemini ve filtreleme eşiğini belirler
  • Filtreleme etiketler, seviyeler ve anahtar kelimelerle belirli bir uygulamanın loglarını genel akıştan ayırmayı sağlar
  • ADB logcat — Android Studio olmadan, USB veya Wi-Fi ile loglara erişmek için terminal komutu
  • Çökme logları — stack trace ile birlikte istisnalar otomatik olarak Logcat'e gelir ve tam çökme teşhisini içerir

Android'de Logcat Nedir

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.

Log Seviyeleri ve Etiketler: Logcat Mesaj Yapısı

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.

SeviyeSabitAmaçVarsayılan olarak gösterilir
VERBOSELog.vMaksimum ayrıntılı hata ayıklama bilgisiHayır
DEBUGLog.dGeliştirici için hata ayıklama mesajlarıHayır
INFOLog.iUygulama çalışması hakkında bilgilendirme mesajlarıEvet
WARNLog.wPotansiyel sorunlar hakkında uyarılarEvet
ERRORLog.eKritik hatalar ve istisnalarEvet
ASSERTLog.wtfPrensipte asla olmaması gereken hatalarEvet

Etiketler: Mesajları Modüllere Göre Düzenleme

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.

Çökme Logları ve İstisna Stack Trace

İş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'da Logcat: Arayüz, Filtreler ve Arama

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.

Seviye ve Etikete Göre Filtreleme

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.

Kaydedilmiş Filtreler

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.

text
# 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

Dışa Aktarma ve Analiz

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: Gelişmiş Çalışma İçin Terminal Komutları

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.

Temel Komutlar

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+).

bash
# 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

grep ve awk ile Filtreleme

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/CD'de Logcat

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.

Kodda Loglama: Log.d, Log.e ve Timber

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 Kütüphanesi

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.

kotlin
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 İçin Koşullu Loglama

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

Bir testi çalıştırmadan önce Logcat arabelleği nasıl temizlenir

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.

Logcat arabellek boyutu nasıl artırılır

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.

Logcat neden uygulamamın loglarını göstermiyor

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.

Logcat'ten çökme logları nasıl okunur

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 nedir ve Logcat'te nasıl tespit edilir

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

  • Logcat — ADB ve Android Studio'nun yerleşik penceresi aracılığıyla erişilebilen Android sistem arabelleği
  • Altı seviye loglama (VERBOSE — ASSERT) mesajın önemini ve filtreleme eşiğini belirler
  • Etiketler, hızlı filtreleme için mesajları uygulama modüllerine göre gruplandırmayı sağlar
  • ADB logcat grep/awk ile GUI arayüzünden daha esnektir ve CI/CD hatları için uygundur
  • Timber loglamayı basitleştirir, otomatik olarak etiket ekler ve Release'te Debug seviyelerini devre dışı bırakır
  • Çökme logları istisnalar ve stack trace ile her çökmede otomatik olarak Logcat'e gelir
  • Kaydedilmiş filtreler Android Studio'da günlük log analizini hızlandırır

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.

Projeyi tartış

Ayrıca okuyun