Hoşgeldin Misafir

Yasar7880

İzmir
1 Mar 2024
848 Mesaj
TIM Görevleri
1

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Bir uygulama geliştirirken her şey yolunda giderken log sisteminin pek önemi yokmuş gibi görünür.
Program çalışır, veritabanı bağlantısı kurulur, kullanıcı giriş yapar ve işler normal şekilde ilerler. Fakat bir gün müşteriden şu mesaj gelir:

"Sisteme giriş yapamıyoruz."

İşte o noktada log kaydı tutmuyorsanız işiniz zorlaşmaya başlar.
Çünkü uygulama size neyin yanlış gittiğini anlatamaz. Hata oluşmuştur ama geride hiçbir iz bırakmamıştır.
Bu yüzden profesyonel projelerde dosya işlemleri ve log mekanizmaları neredeyse uygulamanın kendisi kadar önemlidir.
Bu yazıda Java'da dosya işlemlerinin temel mantığını inceleyecek, ardından basit ama etkili bir log sisteminin nasıl geliştirilebileceğini ele alacağız.


Dosya İşlemleri Neden Önemlidir?

Java uygulamaları çoğu zaman yalnızca veritabanıyla çalışmaz.
Bazı durumlarda bilgilerin doğrudan dosya sistemine yazılması gerekir.

Örneğin:
  • Hata kayıtları
  • Kullanıcı aktiviteleri
  • Yedekleme dosyaları
  • Konfigürasyon ayarları
  • Rapor çıktıları
Bu verilerin düzenli şekilde saklanabilmesi için dosya işlemlerini doğru kullanmak gerekir.


Windows-1-1.webp

Java'da Dosya Oluşturma

Java'nın modern sürümlerinde dosya işlemleri için en sık kullanılan paketlerden biri NIO'dur.
Basit bir örnek düşünelim.

JavaScript:
Path path = Paths.get("uygulama.log"); if (Files.notExists(path)) { Files.createFile(path); }
Bu kod çalıştığında belirtilen isimde bir dosya oluşturulur.
Dosya zaten varsa yeniden oluşturulmaya çalışılmaz.
Küçük bir detay gibi görünse de gerçek projelerde bu kontrol oldukça önemlidir.


Dosyaya Veri Yazmak

Oluşturulan dosya tek başına pek bir işe yaramaz.
Asıl amaç içerisine bilgi yazabilmektir.

JavaScript:
String mesaj = "Uygulama başlatıldı"; 
Files.write( Paths.get("uygulama.log"), 
mesaj.getBytes(), StandardOpenOption.APPEND );
Bu yöntem mevcut dosyanın sonuna yeni veri ekler.
Özellikle log sistemlerinde en çok kullanılan yaklaşım budur.
Çünkü eski kayıtların silinmesi istenmez.


Dosyadan Veri Okuma

Bazen yazdığımız kayıtları tekrar okumamız gerekir.

JavaScript:
List<String> satirlar = Files.readAllLines( Paths.get("uygulama.log") );
Ardından:

JavaScript:
for(String satir : satirlar){ System.out.println(satir); }
Bu yöntem küçük ve orta ölçekli dosyalarda oldukça kullanışlıdır.


Log Sistemi Nedir?

Log sistemi, uygulama içerisinde gerçekleşen olayların kayıt altına alınmasını sağlar.
Aslında mantık oldukça basittir.
Uygulama ne yapıyorsa bunu bir dosyaya yazar.

Örneğin:

09:15 Kullanıcı giriş yaptı
09:17 Sipariş oluşturuldu
09:20 Veritabanı bağlantısı koptu

Birkaç satırlık bu kayıt bile bazen saatlerce sürecek hata ayıklama sürecini birkaç dakikaya indirebilir.


İyi Bir Log Kaydında Neler Bulunmalıdır?

Her kayıt aynı değere sahip değildir.
Aşağıdaki bilgiler mümkün olduğunca loglara eklenmelidir.

Bilgi
Neden Önemli
TarihOlayın zamanı
SaatSorunun oluştuğu an
Log seviyesiHata veya bilgilendirme
MesajOlayın açıklaması
Kullanıcı bilgisi
Takip kolaylığı
Basit bir log örneği:

2026-06-02 14:25:11 [INFO] Kullanıcı sisteme giriş yaptı

Log Seviyeleri Ne İşe Yarar?

Profesyonel uygulamalar tüm kayıtları aynı şekilde tutmaz.
Kayıtlar önem derecesine göre ayrılır.

SeviyeAçıklama
INFOBilgilendirme
DEBUGGeliştirici kayıtları
WARNUyarılar
ERRORHatalar
FATALKritik hatalar

Bu sınıflandırma sayesinde binlerce satırlık log arasında aradığınız kaydı daha kolay bulabilirsiniz.


Basit Bir Log Sınıfı Oluşturmak

Küçük projelerde temel bir Logger sınıfı yeterli olabilir.

JavaScript:
public class Logger { public static void info(String mesaj) { System.out.println( "[INFO] " + mesaj ); } }
Kullanımı


JavaScript:
Logger.info( "Uygulama başlatıldı" );
Gerçek projelerde bu yapı dosyaya yazacak şekilde geliştirilir.


Hazır Log Kütüphaneleri Kullanılmalı mı?

Belirli bir noktadan sonra kendi log sisteminizi geliştirmek yerine hazır çözümler kullanmak daha mantıklıdır.
En yaygın seçenekler şunlardır:

Kütüphane
Kullanım Alanı
Log4jKurumsal projeler
LogbackSpring Boot
java.util.loggingJava standart
SLF4J
Soyutlama katmanı

Özellikle Spring Boot kullanan ekiplerin büyük bölümü Logback tercih etmektedir.


Dosya İşlemlerinde Yapılan Yaygın Hatalar

Yeni başlayan geliştiricilerin sık yaptığı bazı hatalar vardır.

Tüm Hataları Yutmak

Kod:
catch(Exception e){ }


Bu yaklaşım gelecekte ciddi sorunlara neden olur.


Log Tutmamak

Uygulama hata verdiğinde sebebi bulmak zorlaşır.



Dosya Boyutunu Kontrol Etmemek

Aylarca çalışan uygulamalarda log dosyaları gigabayt seviyesine ulaşabilir.
Bu nedenle log döndürme (log rotation) mekanizması kullanmak gerekir.


Gerçek Hayatta Loglar Neden Bu Kadar Değerli?

Bir uygulama geliştirirken kodunuzu siz yazarsınız.
Ama üretim ortamında yaşanan sorunları çoğu zaman göremezsiniz.
Orada sizin gözünüz ve kulağınız log kayıtlarıdır.

İyi tasarlanmış bir log sistemi sayesinde:

  • Hatalar daha hızlı bulunur
  • Performans sorunları tespit edilir
  • Kullanıcı hareketleri izlenebilir
  • Güvenlik olayları analiz edilebilir

Bu yüzden profesyonel yazılım ekipleri log sistemlerine yalnızca bir kayıt mekanizması olarak değil,
uygulamanın önemli bir parçası olarak bakar.


Sevgili THS ailesi

Java'da dosya işlemleri öğrenmesi nispeten kolay konular arasında yer alsa da gerçek değerini log sistemleri geliştirmeye başladığınızda gösterir.
Küçük bir metin dosyasına yazılan birkaç satırlık kayıt bile günler sürebilecek bir sorunun dakikalar içerisinde çözülmesini sağlayabilir.

Eğer Java ile masaüstü, web veya kurumsal uygulamalar geliştiriyorsanız, dosya işlemleri ve loglama konularını erken öğrenmek ileride size ciddi zaman kazandıracaktır. Çünkü iyi yazılmış bir uygulama yalnızca çalışan uygulama değildir; gerektiğinde kendisini anlatabilen uygulamadır.

Bir dahaki Makelemizde "Spring Security ile JWT Authentication Sistemi Kurulumu" konusunu detaylı bir şekilde konu edineceğiz.
Sonraki makalemizde görüşene dek mavi ekransız bugsuz ve sorunsuz sistemlerle çalışmanız dileği ile hoşçakalın.


9jul8m7.jpeg