CodeBlanks Logo Icon CodeBlanks

ILogger

C# kursu · İleri seviye · Ders 73/83

ILogger<T> ile günlükleme sözleşmesini öğrenirsin.

ILogger<T>

ILogger<T>, .NET'te günlükleme (logging) için kullanılan arayüzdür. T tür parametresi kategoriyi belirtir; genelde günlüğü yazan sınıftır. Böylece her sınıfın kendi kategorisinden gelen iletileri ayırt etmek kolaylaşır.

Bir sınıf günlükleyiciyi kurucu enjeksiyonu ile alır: public UserService(ILogger<UserService> logger). Bu, sınıfı somut günlükleyiciye değil arayüze bağlar; testte sahte günlükleyici verilebilir. Üretimde ConsoleLogger<UserService> gibi bir uygulama bağlanır.

Bağımlılık olarak günlükleyici

Günlükleyici, kullanılan sınıfa kurucu parametre olarak verilir. Sınıf bunu özel alanda saklar ve uygun yerlerde çağırır. Bu yapı, sınıfı günlükleyici uygulamasından bağımsız tutar; test ortamında sahte günlükleyici (örneğin bellekte toplanan) verilebilir.

Çağrı kolaylığı için arayüz yaygın metotlar sağlar: LogInformation, LogWarning, LogError ve LogDebug. Her biri farklı önem derecesini taşır; ayrıntılar bir sonraki derste.

Uygulama ILogger<T> ile UserService

Bir ILogger<T> arayüzü tanımla; void LogInformation(string message) metodu olsun. ConsoleLogger<T> sınıfı bu arayüzü uygulayıp Console.WriteLine("[INF] " + message) yapsın. UserService sınıfı kurucudan ILogger<UserService> alsın; Greet(string user) metodu _logger.LogInformation($"Merhaba {user}") çağrısı yapsın. Main'de bir ConsoleLogger<UserService> yaratıp servisi çağır.

Örnek çözümü göster
interface ILogger<T> { void LogInformation(string message); } tanımla. class ConsoleLogger<T> : ILogger<T> { public void LogInformation(string message) => Console.WriteLine("[INF] " + message); } yaz. class UserService { private readonly ILogger<UserService> _logger; public UserService(ILogger<UserService> logger) => _logger = logger; public void Greet(string user) => _logger.LogInformation($"Merhaba {user}"); } yaz. Main'de: var svc = new UserService(new ConsoleLogger<UserService>()); svc.Greet("Ayşe");
Örnek çözüm:
using System;

public interface ILogger<T>
{
    void LogInformation(string message);
}

public class ConsoleLogger<T> : ILogger<T>
{
    public void LogInformation(string message) =>
        Console.WriteLine("[INF] " + message);
}

class UserService
{
    private readonly ILogger<UserService> _logger;
    public UserService(ILogger<UserService> logger) => _logger = logger;
    public void Greet(string user) =>
        _logger.LogInformation($"Merhaba {user}");
}

class Program
{
    static void Main()
    {
        var service = new UserService(new ConsoleLogger<UserService>());
        service.Greet("Ayşe");
    }
}

Kendini test et

  1. ILogger<T> arayüzündeki T neyi belirtir?

    • Günlük kategorisini (genelde sınıfı)
    • Günlük seviyesini
    • Çıktı biçimini
    • Dosya yolunu
    Cevabı göster

    Günlük kategorisini (genelde sınıfı) — Doğru. T kategoriyi belirtir; genelde günlüğü yazan sınıftır.

  2. Günlük metodu çağrısını tamamla

    logger.____("Servis başlatıldı");
    Cevabı göster
    logger.LogInformation("Servis başlatıldı");
  3. ILogger<T> kavramlarını eşleştir

    ILogger<T>
    Günlükleme arayüzü
    T
    Kategori türü
    ConsoleLogger<T>
    Konsola yazar
    LogInformation
    Bilgi seviyesi

İleri seviye bölümündeki tüm dersler