Furkan KapukayaYazılım geliştirme
C# ve .NET2 dk okuma

.NET'te Loglama: ILogger, Yapılandırılmış Loglar ve İyi Uygulamalar

.NET'te ILogger ile loglama, log seviyeleri, yapılandırılmış loglama, kişisel verilerin loglardan uzak tutulması, log saklama ve izleme araçlarıyla entegrasyon.

Bir uygulama canlı ortamda hata verdiğinde, ne olduğunu anlamanın tek yolu çoğu zaman loglardır. İyi tasarlanmış loglar sorunu dakikalar içinde bulmanızı sağlar; kötü loglar ise ya hiçbir şey söylemez ya da gereksiz bilgi yığınında kaybolur.

ILogger ile başlamak

.NET'in yerleşik ILogger<T> arayüzü, DI üzerinden her sınıfa enjekte edilebilir:

public class SiparisServisi(ILogger<SiparisServisi> logger)
{
    public void Olustur(int musteriId, decimal tutar)
    {
        logger.LogInformation("Sipariş oluşturuldu. Müşteri {MusteriId}, tutar {Tutar}", musteriId, tutar);
    }
}

Yapılandırılmış loglama

Yukarıdaki örnekte değerler metne gömülmek yerine adlandırılmış alanlar olarak kaydedilir. Bu sayede log aracında "MusteriId = 42 olan tüm kayıtlar" gibi sorgular yapılabilir. Metin birleştirme ("Müşteri " + id) yerine her zaman şablon kullanın.

Log seviyeleri

  • Trace / Debug: Geliştirme sırasında ayrıntılı bilgi.
  • Information: Normal akıştaki önemli olaylar.
  • Warning: Beklenmeyen ama uygulamanın devam edebildiği durumlar.
  • Error: İşlemin başarısız olduğu hatalar.
  • Critical: Uygulamanın çalışamaz hale geldiği durumlar.

Canlı ortamda genellikle Information ve üstü kaydedilir.

Ne loglanmamalı?

  • Parolalar, API anahtarları, erişim belirteçleri.
  • Kart numaraları ve finansal hassas veriler.
  • Gereksiz kişisel veriler: T.C. kimlik numarası, sağlık bilgisi, tam adres.

Loglar da KVKK kapsamında veridir; saklama süresi ve erişim yetkileri belirlenmelidir. Bkz. AI ile kod yazarken güvenlik ve OWASP Top 10.

Logları nereye yazmalı?

  • Geliştirmede konsol.
  • Canlıda dosya, merkezi log sunucusu veya bulut izleme hizmeti.
  • OpenTelemetry ile log, iz ve metrikleri birlikte toplayarak bir isteğin baştan sona izlenmesi. Bkz. Aspire nedir.

Yüksek performanslı loglama

Sık çağrılan kodlarda LoggerMessage kaynak üreticisi, log şablonlarını önceden derleyerek bellek ayırmayı azaltır.

Konsol uygulamalarında

Zamanlanmış görevlerde loglar, görevin ne yaptığını gösteren tek kanıttır. Her çalışmanın başlangıcı, işlenen kayıt sayısı ve sonucu mutlaka loglanmalıdır. Bkz. zamanlanmış görevler.

Sık sorulan sorular

Serilog veya NLog kullanmalı mıyım?

Bu kütüphaneler zengin hedef ve yapılandırma seçenekleri sunar ve ILogger ile birlikte çalışır. Kodunuzu ILogger'a bağlı tutmak, kütüphaneyi daha sonra değiştirmeyi kolaylaştırır.

Loglar ne kadar süre saklanmalı?

İhtiyaca ve mevzuata göre belirlenir. Kişisel veri içeren logların saklama süresi KVKK politikanızda tanımlanmalıdır.

Sonuç

İyi loglama, sorun çıktığında saatler değil dakikalar harcamanızı sağlar. Uygulamalarınızda izleme altyapısı kurmak için iletişime geçebilirsiniz.