Metin Dosyalarıyla Çalışmak: Log Analiz Aracı

Bu ders, serinin üçüncü dersidir ve önceki derste öğrendiğiniz temel dosya okuma-yazma işlemlerinin üzerine inşa edilir. Bir önceki derste open() fonksiyonunu ve dosya modlarını tanımıştınız; bu derste bu bilgiyi gerçek bir problemi çözmek için kullanacaksınız: bir log dosyasını analiz eden küçük bir araç yazmak. Bir sonraki derste ise dosyalardan Excel dünyasına geçip openpyxl kütüphanesiyle tablo verileriyle çalışmaya başlayacaksınız; bu yüzden burada öğreneceğiniz satır satır okuma ve desen arama mantığı orada da işinize yarayacak.

Bu derste ne yapacağız?

Sunucularda, uygulamalarda ve birçok programda çalışma sırasında olup bitenler log dosyası adı verilen metin dosyalarına satır satır yazılır. Bu derste, örnek bir log dosyası oluşturacak, onu satır satır okuyacak, içinde HATA, UYARI gibi belirli desenleri arayacak ve sonunda kaç tane hata, kaç tane uyarı olduğunu özetleyen bir rapor üreteceğiz. Amacımız, gerçek dünyada sıkça karşılaşılan bir otomasyon görevini uçtan uca tamamlamak.

Ön koşul olarak, önceki derste gördüğünüz open() fonksiyonu, dosya modları (r, w, a) ve temel Python döngüleri (for) hakkında fikir sahibi olmanız yeterlidir. Ayrıca bilgisayarınızda Python'ın kurulu olması ve bir metin düzenleyicide (örneğin VS Code veya Not Defteri) kod yazabiliyor olmanız gerekir.

Kavram

Bir log dosyasını, bir doktorun hasta günlüğüne benzetebiliriz. Doktor her muayenede hastanın durumunu, tarihini ve varsa özel bir notunu ("ateşi yüksek", "kontrole çağrıldı" gibi) günlüğe satır satır yazar. Yıl sonunda bu günlüğü elden geçirip kaç hastada ateş yüksekliği görüldüğünü saymak isterseniz, günlüğü baştan sona okur ve "ateş" geçen satırları sayarsınız. İşte log analiz aracı da tam olarak bunu yapar: bir metin dosyasını satır satır tarar ve aradığımız kelimeleri (deseni) içeren satırları bulup sayar.

Burada önemli olan iki kavram vardır. Birincisi context manager, yani Python'da with anahtar kelimesiyle kullanılan yapı. Bir dosyayı açtığınızda, işiniz bittiğinde onu kapatmanız gerekir; tıpkı bir dolabı açıp kullandıktan sonra kapatmanız gerektiği gibi. with ifadesi, siz unutsanız bile dosyayı işiniz bitince otomatik olarak kapatır. İkincisi ise satır satır okuma kavramıdır. Büyük bir dosyayı bir defada belleğe yüklemek yerine, dosyayı bir defter gibi düşünüp sayfaları (satırları) teker teker çevirerek okumak, hem bellek açısından tasarrufludur hem de kodu daha anlaşılır kılar.

Adım adım uygulama

Önce çalışacağımız bir örnek log dosyası oluşturalım, sonra bu dosyayı analiz eden bir program yazalım.

1. Adım: Örnek bir log dosyası oluşturun

Bir metin düzenleyicide uygulama.log adında yeni bir dosya oluşturun ve aşağıdaki satırları elle yazın (veya Python ile üreteceğiz, ikinci seçeneği tercih edin):

  • 2026-09-10 09:01:23 BİLGİ Sunucu başlatıldı
  • 2026-09-10 09:03:11 UYARI Disk alanı yüzde seksene ulaştı
  • 2026-09-10 09:05:47 HATA Veritabanına bağlanılamadı
  • 2026-09-10 09:06:02 BİLGİ Yeniden bağlanma denemesi yapılıyor
  • 2026-09-10 09:06:15 HATA Zaman aşımı oluştu
  • 2026-09-10 09:10:00 BİLGİ İşlem tamamlandı

İsterseniz bu satırları elle yazmak yerine, Python ile de oluşturabilirsiniz. Aşağıdaki kodu ornek_olustur.py adıyla kaydedip çalıştırın; her satır bir kod satırının ne yaptığını açıklar.

  • satirlar = [ "2026-09-10 09:01:23 BİLGİ Sunucu başlatıldı ", "2026-09-10 09:03:11 UYARI Disk alanı yüzde seksene ulaştı ", "2026-09-10 09:05:47 HATA Veritabanına bağlanılamadı ", "2026-09-10 09:06:02 BİLGİ Yeniden bağlanma denemesi yapılıyor ", "2026-09-10 09:06:15 HATA Zaman aşımı oluştu ", "2026-09-10 09:10:00 BİLGİ İşlem tamamlandı " ] — Bu satır, dosyaya yazılacak örnek log satırlarını bir liste içinde tutar. Her satırın sonundaki \n karakteri "yeni satıra geç" anlamına gelir.
  • with open("uygulama.log", "w", encoding="utf-8") as dosya: — Dosyayı yazma ("w") modunda açar. "w" modu, dosya yoksa oluşturur, varsa içeriğini sıfırdan yazar. encoding="utf-8" parametresi Türkçe karakterlerin (İ, ı, ş, ğ gibi) doğru kaydedilmesini sağlar.
  •     dosya.writelines(satirlar) — Liste içindeki tüm satırları tek seferde dosyaya yazar.
  • print("uygulama.log dosyası oluşturuldu.") — Ekrana bir bilgi mesajı yazdırır, işlemin bittiğini anlamamızı sağlar.

with bloğu bittiğinde (yani girinti biter bitmez), Python dosyayı otomatik olarak kapatır; siz dosya.close() yazmak zorunda kalmazsınız.

2. Adım: Log analiz fonksiyonunu yazın

Şimdi log_analiz.py adında yeni bir dosya oluşturun ve aşağıdaki kodu yazın. Her satırın açıklamasını hemen altında bulacaksınız.

  • def log_analiz_et(dosya_adi): — Log dosyasını analiz edecek fonksiyonu tanımlar; parametre olarak analiz edilecek dosyanın adını alır.
  •     hata_sayisi = 0 — Kaç tane "HATA" geçen satır bulunduğunu tutacak sayaç, başlangıçta sıfır.
  •     uyari_sayisi = 0 — Kaç tane "UYARI" geçen satır bulunduğunu tutacak sayaç, başlangıçta sıfır.
  •     toplam_satir = 0 — Dosyadaki toplam satır sayısını tutacak sayaç.
  •     with open(dosya_adi, "r", encoding="utf-8") as dosya: — Dosyayı okuma ("r") modunda açar; işlem bitince otomatik kapanır.
  •         for satir in dosya: — Dosyayı satır satır dolaşır; her turda bir sonraki satır "satir" değişkenine gelir.
  •             toplam_satir += 1 — Her satırda toplam sayaç bir artırılır.
  •             if "HATA" in satir: — Satırın içinde "HATA" kelimesi geçiyor mu diye kontrol eder.
  •                 hata_sayisi += 1 — Geçiyorsa hata sayacını bir artırır.
  •             elif "UYARI" in satir: — Satırda "HATA" yoksa ama "UYARI" varsa bu bloğa girer.
  •                 uyari_sayisi += 1 — Uyarı sayacını bir artırır.
  •     return toplam_satir, hata_sayisi, uyari_sayisi — Fonksiyon, topladığı üç sayıyı birlikte geri döndürür.

Şimdi bu fonksiyonu çağıran ve sonucu ekrana yazdıran son bölümü ekleyin:

  • if __name__ == "__main__": — Bu dosya doğrudan çalıştırıldığında aşağıdaki kodun çalışmasını sağlayan standart bir Python kontrolüdür.
  •     toplam, hata, uyari = log_analiz_et("uygulama.log") — Fonksiyonu çağırır ve dönen üç değeri ayrı değişkenlere atar.
  •     print(f"Toplam satır: {toplam}") — Toplam satır sayısını ekrana yazdırır; f-string ile değişkeni metnin içine yerleştirir.
  •     print(f"Hata sayısı: {hata}") — Hata sayısını ekrana yazdırır.
  •     print(f"Uyarı sayısı: {uyari}") — Uyarı sayısını ekrana yazdırır.

3. Adım: Programı çalıştırın

Terminali (komut satırını) açın, dosyaların bulunduğu klasöre gidin ve sırasıyla şu iki komutu çalıştırın: önce python ornek_olustur.py, ardından python log_analiz.py. İkinci komuttan sonra ekranda toplam satır, hata ve uyarı sayılarını görmelisiniz. Örnek log dosyamıza göre sonuç şöyle olmalıdır: toplam altı satır, iki hata, bir uyarı.

4. Adım (isteğe bağlı): Sonucu bir rapor dosyasına yazın

Analiz sonucunu ekrana yazdırmak yerine (ya da ek olarak) bir dosyaya kaydetmek isterseniz, ekleme modunu ("a") kullanabilirsiniz. Bu mod, mevcut dosyanın sonuna yeni içerik ekler, var olanı silmez. Aşağıdaki satırları önceki koda ekleyin:

  • with open("rapor.txt", "a", encoding="utf-8") as rapor: — Rapor dosyasını ekleme ("a") modunda açar; dosya yoksa oluşturur, varsa sonuna ekler.
  •     rapor.write(f"Toplam: {toplam}, Hata: {hata}, Uyarı: {uyari} ") — Özet bilgiyi tek satır olarak rapor dosyasına ekler.

Bu şekilde programı her çalıştırdığınızda, rapor.txt dosyasına yeni bir satır eklenir ve zaman içindeki analiz geçmişini görebilirsiniz.

Sık karşılaşılan sorunlar

Hata / SorunOlası NedenÇözüm
FileNotFoundError: uygulama.log bulunamadıLog dosyası, Python dosyasıyla aynı klasörde değil ya da isim yanlış yazıldıDosya adını ve klasör konumunu kontrol edin; terminalde doğru klasörde olduğunuzdan emin olun
Türkçe karakterler bozuk görünüyor (İ, ş, ğ yerine garip semboller)Dosya açılırken encoding parametresi belirtilmediopen() fonksiyonunda her zaman encoding="utf-8" kullanın
Sayaçlar hep sıfır çıkıyorAranan kelime ("HATA", "UYARI") log dosyasındaki yazımla birebir eşleşmiyor (büyük/küçük harf farkı gibi)Aranan kelimeyi log dosyasındaki yazımla birebir aynı yazın veya karşılaştırmadan önce hem satırı hem kelimeyi .upper() ile büyük harfe çevirin
Program çalışınca dosyanın içeriği tamamen silinmiş görünüyorDosya yanlışlıkla "w" (yazma) modunda açıldı, bu mod içeriği sıfırlarVar olan içeriği korumak istiyorsanız "a" (ekleme) modunu, sadece okumak istiyorsanız "r" modunu kullanın
UnicodeDecodeError alınıyorDosya farklı bir karakter kodlamasıyla (örneğin Windows'un varsayılan cp1254 kodlaması ile) kaydedilmişDosyayı UTF-8 olarak yeniden kaydedin veya open() içinde encoding="utf-8" yerine dosyanın gerçek kodlamasını belirtin

Mini görev

Şimdi öğrendiklerinizi pekiştirmek için kendi başınıza küçük bir geliştirme yapın. Log analiz fonksiyonunu genişletin: dosyadaki her HATA satırının tam metnini, ayrı bir hatalar.txt dosyasına yazdıran bir özellik ekleyin. Böylece sadece kaç hata olduğunu değil, hataların ne olduğunu da görebileceksiniz.

İpucu: for satir in dosya: döngüsü içinde, "HATA" geçen satırı bulduğunuzda onu ayrı bir listeye ekleyin; döngü bittikten sonra bu listeyi yeni bir with open("hatalar.txt", "w", encoding="utf-8") as f: bloğuyla dosyaya yazın.

Kontrol listeniz:

  • Program hatasız çalışıyor mu?
  • hatalar.txt dosyası oluştu mu ve içinde sadece HATA satırları var mı?
  • Türkçe karakterler doğru görünüyor mu?
  • Orijinal uygulama.log dosyası bozulmadan kaldı mı (yanlışlıkla "w" modunda açılmadı mı)?
  • Programı ikinci kez çalıştırdığınızda hatalar.txt dosyasının içeriği doğru şekilde güncelleniyor mu (üst üste eklenmiyor mu)?

Kendini sına

1. with open("dosya.txt", "r") as f: satırındaki with ifadesinin temel amacı nedir?

2. Bir dosyayı açarken kullanılan "a" modu ne işe yarar ve "w" modundan farkı nedir?

3. for satir in dosya: döngüsünde satir değişkeni her turda neyi temsil eder?

4. Türkçe karakterlerin dosyada doğru görünmesi için open() fonksiyonuna hangi parametre eklenmelidir?

5. Bir log dosyasında kaç tane "UYARI" geçtiğini saymak için hangi Python operatörünü bir if ifadesiyle birlikte kullanırsınız?

Cevaplar

1. with ifadesi, dosyanın işiniz bittiğinde otomatik olarak kapatılmasını sağlar; siz dosya.close() yazmayı unutsanız bile bu güvence altındadır.

2. "a" modu (ekleme modu), dosyanın mevcut içeriğini korur ve yeni yazılan verileri dosyanın sonuna ekler; "w" modu ise dosyanın önceki içeriğini tamamen siler ve baştan yazar.

3. satir değişkeni, dosyadaki o anki satırın metnini (sonundaki yeni satır karakteri dahil) bir metin (string) olarak temsil eder.

4. encoding="utf-8" parametresi eklenmelidir; bu, Türkçe'ye özgü İ, ı, ş, ğ, ö, ü, ç gibi karakterlerin doğru okunup yazılmasını sağlar.

5. in operatörünü bir if ifadesiyle birlikte kullanırsınız; örneğin if "UYARI" in satir: ifadesi, satırın içinde bu kelimenin geçip geçmediğini kontrol eder.

Bu dersi kayıt olmadan izleyebilirsin. İlerlemeni kaydetmek, sertifika almak ve puan tablosuna girmek için ücretsiz üye ol: Kayıt Ol