Android Hata Günlükleri ADB ile Nasıl Okunur?

Telefon arızaları, çözüm rehberleri, teknik destek ve güncel bilgiler. Sorununuzu paylaşın, uzman topluluktan adım adım çözüm alın.

CoralCrescendo

Kayıtlı Kullanıcı
Puan 0
Çözümler 0
Katılım
26 Tem 2026
Mesajlar
533
Tepkime puanı
0
CoralCrescendo
Android cihazlarda yaşanan hataların çözümü, geliştiricilerin en çok başvurduğu ve en kritik süreçlerden biridir. Hata günlükleri, uygulamanın çalışma sırasında topladığı tüm olayları, uyarıları ve hataları sistematik bir biçimde sunar. Bu günlükler, hem düşük seviyeli donanım hatalarından yüksek seviyeli kod hatalarına kadar geniş bir yelpazeyi kapsar. Aşağıdaki makalede, Android Hata Günlüklerini ADB ile nasıl okuyacağınızı, günlükleri nasıl filtreleyeceğinizi, kaydedeceğinizi ve analiz edeceğinizi adım adım ele alacağız. Ayrıca, deneyimli geliştiricilerin sıklıkla kullandığı ipuçlarını ve sık sorulan sorulara verilecek cevapları bulabilirsiniz.

Temel Kavramlar ve Tanım​

Android hata günlükleri, işletim sistemi ve uygulama katmanının ürettiği log kayıtlarıdır. Logcat, Android’in resmi log toplama aracıdır ve ADB (Android Debug Bridge) üzerinden erişilebilir. Logcat, farklı seviyelerde (VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT) mesajları sıralar. Logcat’in önemli bir özelliği, tag adıyla belirli bir bileşen ya da modülün çıktısını izleyebilmesidir. Örneğin, bir uygulamanın “MainActivity” tag’i üzerinden sadece o aktivitenin oluşturduğu mesajları görebilirsiniz. Günlüklerin amacı, geliştiricinin kodda beklenmeyen davranışları hızlıca tespit etmesi ve çözüm üretmesidir.

Logların temel işlevi, uygulama performansını izlemek, hataları teşhis etmek ve kullanıcı deneyimini geliştirmektir. Günlüklerin doğru yapılandırılması, uygulama derleme sürecinde de kritik bir rol oynar. Örneğin, Android Studio’da “Build Variants” sekmesi altında “debug” ve “release” modları için farklı log seviyeleri belirlenebilir. Debug modunda tüm loglar aktifken, release modunda sadece WARN ve üst seviyeler etkinleştirilir. Böylece gerçek dünya dağıtımlarında gereksiz ayrıntıların yok edilmesiyle performans ve güvenlik iyileştirilir.

ADB ile Logcat’e Erişim​

ADB, Android Debug Bridge, cihaz ve emülatör ile bilgisayar arasında iletişim kuran bir protokoldür. Logcat’e erişmek için öncelikle USB debug modu açılmış bir cihazın bağlı olması gerekir. `adb devices` komutu ile cihaz listelenir. Erişim için `adb logcat` komutu kullanılır. Bu komut, tüm cihaz loglarını gerçek zamanlı olarak terminale aktarır. ADB’nin, birden fazla cihaz olduğunda cihaz ID’siyle filtreleme yapabilme özelliği, çoklu cihaz testlerinde kritik bir avantaj sağlar. Örneğin, `adb -s emulator-5554 logcat` komutu, sadece belirtilen emülatörün loglarını gösterir.

Logcat, aynı zamanda belirli bir uygulamanın paket adıyla filtreleme yapma yeteneğine sahiptir. `adb logcat -s com.example.myapp:D :S` komutu, yalnızca `com.example.myapp` paketine ait DEBUG seviyesini ve üzerini gösterir, diğer tüm logları sessize alır. Bu, yoğun log ortamlarında istenmeyen girdileri ortadan kaldırır. ADB’nin logcat’e bağlanma süresi minimum düzeydedir ve çoğu durumda birkaç saniye içinde cihazdan veri akışı başlar. Bu hızlı erişim, hata ayıklama döngüsünü önemli ölçüde kısaltır.

ADB, aynı zamanda logları doğrudan bir dosyaya yönlendirme yeteneğine sahiptir. `adb logcat > log.txt` komutu, logcat çıktısını `log.txt` dosyasına kaydeder. Bu, özellikle uzun süreli testlerde logların korunması ve sonradan analiz edilmesi için ideal bir yöntemdir. Dosya yönlendirme, platform bağımsız olarak çalışır ve Windows, macOS, Linux gibi işletim sistemlerinde aynı komut setiyle kullanılabilir. Dosya büyüklüğü kontrolü için `-f` parametresiyle döngüsel dosya yönetimi de mümkündür, böylece disk alanı dolmadan loglar kaydedilir.

Log Filtreleme Teknikleri​

Logcat’in filtreleme kabiliyeti, hataları hızlıca izole etmek için vazgeçilmezdir. Filtreleme, tag, öncelik seviyesi ve paket adı gibi kriterlerle yapılır. Örneğin, `adb logcat :E` komutu, yalnızca ERROR seviyesindeki mesajları gösterir. Tag bazlı filtreleme ise belirli bir bileşenin çıktısını izlemek için kullanılır: `adb logcat MyActivity:D`. Tag isimleri genellikle sınıf adı veya özel bir tanımlayıcıdır, bu sayede aynı seviyedeki mesajlar arasında rahatça ayrım yapılabilir.

İleri düzey filtreleme, –v (verbose) parametresiyle birlikte kullanıldığında log satırlarının tam zaman damgası, thread ID, pid ve daha fazla bağlamsal bilgi sunar. Bu, çoklu thread’li uygulamalarda hangi thread’in hangi hatayı verdiğini belirleme konusunda kritik bir rol oynar. Örneğin, `adb logcat -v long` komutu, her log satırının başına zaman, tag, öncelik, pid ve thread ID ekler. Böylece hatanın tam bağlamı anında anlaşılabilir.

Logcat ayrıca –t (top) parametresiyle son N satırını gösterme yeteneğine sahiptir. `adb logcat -t 100` komutu, son 100 log satırını getirir. Bu, hızlı bir şekilde son yaşanan hataları görmek için kullanışlıdır. Büyük log dosyalarında bellek tüketimini azaltmak ve konsol çıktısını okunabilir kılmak için –t parametresi ile kombinasyon içinde kullanılabilir.

Logları Dosyaya Aktarma ve Saklama​

Uzun süren test süreçlerinde, logların kaybolmaması için sürekli dosyaya yazmak gerekir. `adb logcat -f` komutu, logcat çıktısını belirttiğiniz dosyaya yönlendirir. Örneğin, `adb logcat -f /sdcard/test.log` komutu, cihazın dahili depolamasına `test.log` dosyası oluşturur. Bu dosya, daha sonra `adb pull /sdcard/test.log` komutu ile bilgisayarınıza aktarılabilir. Böylece cihazdaki logları offline ortamda inceleyebilirsiniz.

Dosya boyutu kontrolü için `-f` ile birlikte `-s` (size) parametresi kullanılabilir. Örneğin, `adb logcat -f /sdcard/test.log -s 10M` komutu, dosya 10 MB aştığında eski satırları silerek yeni satırları ekler. Bu döngüsel dosya yönetimi, disk alanı sınırlı cihazlarda log kaybını önler. Ayrıca, logların sıkıştırılması için `gzip` gibi araçlar ile dosya boyutu küçültülebilir: `adb logcat -f /sdcard/test.log.gz` ve sonrasında `gzip -d test.log.gz` ile açılabilir.

Cihazın depolama alanını korumak adına, log dosyalarının otomatik olarak silinmesi için bir cron işi veya Android’in kendi “Logcat Daemon” servisi yapılandırılabilir. Bu, sürekli log toplama senaryolarında disk dolmasını engeller. Log dosyalarının düzenli olarak yedeklenmesi ve arşivlenmesi, uzun vadeli hata analizi ve performans izleme raporlarının oluşturulmasında kritik bir adımdır.

Gerçek Zamanlı Hata İzleme​

Gerçek zamanlı hata izleme, uygulama çalışırken anlık olarak hataları tespit etmek için kullanılır. Logcat’in `-v` parametresiyle birlikte `-b` (buffer) seçeneği, belirli bir buffer türünü izlemeyi sağlar. Örneğin, `adb logcat -b main -v time` komutu, ana buffer’ı saat damgası ile birlikte gösterir. Bu, sistem başladığında meydana gelen hataların takibini kolaylaştırır.

Android Studio, “Logcat” penceresinde filtreleme seçenekleriyle gerçek zamanlı izleme sağlar. “Show only selected application” seçeneği, uygulamanın paket adıyla filtreleme yapar. Aynı zamanda “Search” çubuğunda belirli bir anahtar kelimeyi arayarak ilgili hataları hızlıca bulabilirsiniz. Bu arayüz, GUI tabanlı bir deneyim sunar ve kod editöründen direkt olarak hatalara tıklama imkanı verir.

Gerçek zamanlı izleme, ayrıca “Sticky” modda çalıştırılabilir. `adb logcat -b main -v time -d *:E` komutu, yalnızca ERROR seviyesindeki mesajları hafızada tutar ve terminal kapandığında bile hataları kaydeder. Bu sayede, uygulama çökmeleri gibi kritik olaylar anlık olarak yakalanır ve detaylı inceleme için kaydedilir.

Logcat’in Gelişmiş Özellikleri​

Logcat, basit bir log görüntüleyici olmanın ötesinde birçok gelişmiş özelliğe sahiptir. `-n` parametresi, birden fazla dosya arasında döngüsel log kaydı yapar. Örneğin, `adb logcat -f /sdcard/log_%N.txt -n 5` komutu, 5 dosya arasında döngüsel olarak log kaydeder. Böylece, uzun süren testlerde tek bir büyük dosyanın oluşmasını önler.

`-c` (clear) parametresi, başlangıçta log buffer’ını temizler. `adb logcat -c` komutu, eski logları siler ve yeni hataları temiz bir ortamda toplar. Bu özellikle, belirli bir test senaryosunun başında temiz bir log ortamı oluşturmak için kullanışlıdır. `-d` (dump) parametresi, hemen logları alır ve çıkışa basar, ardından komut kapanır. Bu, tek seferlik log toplama için idealdir.

Logcat’in “–filter” parametresi, aynı anda birden fazla kriterle filtreleme yapmayı sağlar. Örneğin, `adb logcat -f /sdcard/debug.log -s MyApp:W MyActivity:D` komutu, `MyApp` tag’ine WARN seviyesini ve `MyActivity` tag’ine DEBUG seviyesini kaydeder. Bu karmaşık filtreleme, çok katmanlı uygulama mimarilerinde hataların hangi katmanda ortaya çıktığını hızlıca izole eder.

Android Studio Entegrasyonu​

Android Studio, ADB ve Logcat entegrasyonunu doğrudan IDE içinde sunar. “Run” menüsünden “Edit Configurations” seçeneğinde, “Logcat” sekmesi yer alır. Burada, uygulamanın paket adı, öncelik seviyesi ve tag filtreleri doğrudan ayarlanabilir. Bu, ADB komut satırı bilgisi bilmeden logları doğrudan IDE’den kontrol etmeyi sağlar.

IDE içindeki “Logcat” penceresinde, log satırlarına sağ tıklayarak “Show in Android Device Monitor” seçeneğiyle cihazın monitör penceresine yönlendirebilirsiniz. Ayrıca, “Logcat” penceresinin sağ üst köşesinde bulunan “Save as…” düğmesiyle logları doğrudan bir dosyaya kaydetmek mümkündür. Bu, manuel `adb logcat -f` komutlarının yerini alır ve işlemi görsel bir arayüzde tamamlar.

Android Studio’nun “Profiler” sekmesi, CPU, memory ve network aktivitelerini izlerken aynı anda logcat’i de görebilir. Böylece, bir performans sorununu izlerken aynı anda hataları da görebilirsiniz. Bu entegre ortam, hataların performans üzerindeki etkisini doğrudan görmenizi sağlar.

Logları Anlama ve Hata Çözümü​

Log satırları genellikle şu formatta görünür: `06-01 12:34:56.789 1234 5678 D MyTag: Hata mesajı`. Burada zaman damgası, süreç ID (pid), thread ID, öncelik seviyesi, tag ve mesaj bulunur. Hata çözümünde bu alanların analizi kritik öneme sahiptir. Örneğin, aynı hatanın farklı thread’lerde tekrar edilmesi, thread güvenliği sorunlarını işaret eder.

`StackTrace`’ler, hatanın nereden kaynaklandığını gösterir. `E` seviyesinde bir satır, genellikle `java.lang.NullPointerException` gibi istisnanın üst kısmını içerir. Bu satırın hemen altındaki satırlar, hatanın hangi sınıf ve satırda oluştuğunu gösterir. Bu bilgiyi kullanarak, hatalı kod satırını hızlıca bulabilirsiniz.

Loglarda sıkça karşılaşılan hatalar şunlardır: `java.lang.OutOfMemoryError`, `android.view.InflateException`, `android.os.NetworkOnMainThreadException`. Bu hataların log mesajları, genellikle çözüm önerilerini içerir, örneğin `OutOfMemoryError` için bitmap’lerin uygun boyutta tutulması veya `NetworkOnMainThreadException` için asenkron işlemlerin kullanılmasını belirtir. Loglar, hatanın bağlamını ve çözüm yolunu sunarak, hızlı müdahaleyi mümkün kılar.

Uzman Önerileri ve İpuçları​

1. Debug ve Release Modlarını Ayrı Tutun – Debug modunda tüm logları aktif tutun; release modunda sadece WARN ve üst seviyeleri gösterin.
2. Tag’leri Tutarlı Kullanın – Her sınıfa özgü tag kullanarak logları kolayca filtreleyin.
3. Log Seviyesini İhtiyaca Göre Ayarlayın – Geliştirme sırasında DEBUG, üretim ortamında ERROR kullanın.
4. Logları Dosyaya Aktarın – Uzun süren testlerde `adb logcat -f` ile dosyaya yönlendirin.
5. Döngüsel Dosya Yönetimi Kullanın – `-n` parametresi ile disk alanını koruyun.
6. Gerçek Zamanlı İzleme İçin “Show only selected application” Seçeneğini Kullanın – Android Studio’da bu filtre ile sadece uygulamanızın loglarını görün.
7. “Clear” Komutunu Test Öncesinde Kullanın – `adb logcat -c` ile eski logları temizleyin.
8. Logcat’in Gelişmiş Filtreleme Özelliklerini Kullanarak Karmaşık Senaryoları İzleyin – Çoklu tag ve seviyeli filtreleme yapın.
9. Log Analiz Araçlarını Entegre Edin – `logcat` çıktısını `grep`, `awk` veya `sed` ile işleyerek hızlıca hataları ayıklayın.
10. Hata Mesajlarını Dokümante Edin – Loglarda çıkan hataları proje wiki’lerine ekleyin, tekrar eden hatalar için çözümler oluşturun.

Sıkça Sorulan Sorular​

Logcat’i neden sadece ADB ile kullanmalıyım?​

ADB, cihazla doğrudan bağlantı kurar ve tüm log buffer’larını tek bir arayüz üzerinden erişim sağlar. Logcat’i doğrudan Android Studio üzerinden kullanmak da mümkündür ancak ADB komut satırı, otomasyon ve script entegrasyonu için daha esnektir.

Log dosyalarını otomatik olarak nasıl saklarım?​

Bir cron işi veya Windows Task Scheduler ile `adb logcat -f /sdcard/test.log` komutunu periyodik olarak çalıştırabilirsiniz. Dosyanın boyutunu sınırlamak için `-s 5M` gibi parametreler ekleyin.

Hangi log seviyeleri üretim ortamında kullanılmalı?​

Üretim ortamında WARN, ERROR ve ASSERT seviyeleri yeterlidir. DEBUG ve VERBOSE seviyeleri, gereksiz bilgi akışı ve potansiyel güvenlik açıkları oluşturur.

Logcat’in “–b main” parametresi nedir?​

`-b main` ana buffer’ı izler, yani sistemin başlangıç ve çalışma sırasında ürettiği logları içerir. Diğer buffer’lar arasında `-b radio`, `-b events` ve `-b system` bulunur.

Logcat ile crash dump’ı nasıl elde ederim?​

`adb shell am crash` komutu ile uygulamayı crash yapabilir, ardından `adb pull /data/anr/traces.txt` ile crash dump’ı çekebilirsiniz. Logcat, crash sırasında otomatik olarak stack trace’i gösterir.

Logcat’in “–v long” parametresi ne işe yarar?​

`-v long` parametresi, her log satırının başına zaman damgası, pid, thread ID ve öncelik seviyesi ekler. Bu, çoklu thread’li uygulamalarda hatanın bağlamını anlamak için kullanışlıdır.

Logcat’i GUI yerine komut satırı ile kullanmanın avantajları nelerdir?​

Komut satırı, otomasyon, script entegrasyonu ve uzak cihaz yönetimi için idealdir. GUI ise kullanıcı dostu arayüz sunar, ancak otomatik test senaryolarında sınırlı esneklik sağlar.

Sonuç​

Android hata günlükleri, uygulama geliştirme sürecinde kritik bir rol oynar. ADB ve Logcat sayesinde, hataları gerçek zamanlı olarak izleyebilir, filtreleyebilir,
Sonuç olarak, Android Hata Günlükleri ADB ile okunması, uygulama hatalarını hızlıca tanımlamanız ve çözmenize olanak tanır. Logcat’in filtreleme, dosyaya yönlendirme ve döngüsel kayıt özellikleri, hem geliştirme hem de üretim ortamlarında log yönetimini optimize eder. Uzman önerilerini uygulayarak, log seviyelerini doğru ayarlamak, tag’leri tutarlı kullanmak ve otomatik dosya yönetimi eklemek, hataların izlenebilirliğini ve çözüm süresini kısaltır. Gerçek zamanlı izleme ve log analizi araçlarının entegrasyonu, performans sorunlarıyla birlikte hataların da aynı anda görülmesini sağlar. Bu teknikleri sistematik olarak uyguladığınızda, Android uygulamalarınızın stabilitesi ve kullanıcı deneyimi önemli ölçüde artar.
 
Geri