CodeBlanks Logo Icon CodeBlanks

Log providers

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

Console ve Debug log provider'larını öğrenirsin.

Log providers

Sağlayıcı (provider), günlükleri nereye yazacağını belirler. Yaygın iki sağlayıcı: ConsoleLoggerProvider konsola yazar; DebugLoggerProvider Visual Studio'nun Çıktı penceresine yazar. Birden fazla sağlayıcı aynı günlükleyiciye bağlanabilir.

Sağlayıcılar bir fabrika üzerinden yapılandırılır: loggerFactory.AddConsole().AddDebug(). Böylece tek bir ILogger<T> çağrısı hem konsola hem hata ayıklayıcıya düşer. Üretimde Debug kapatılır; yalnızca Console veya dosya kalır.

Çoklu sağlayıcı

Bir günlükleyici aynı anda birden fazla sağlayıcıya yazabilir. Örneğin hem Console hem Debug aynı iletiyi alır; kullanıcı konsolda görür, geliştirici Çıktı penceresinde. Bu, tek çağrı çok hedef modelidir.

Testlerde bu çoklu yapıyı sahte sağlayıcılarla denetlemek kolaydır: günlükleri bellekte toplayan bir sağlayıcı eklersin, sonra içeriğini Assert.Equal ile doğrularsın. Bu, gerçek konsol çıktısını yakalamaktan daha güvenilir.

Uygulama Console ve Debug sağlayıcılarını uygula

Bir ILogger<T> arayüzü tanımla; void LogInformation(string message) metodu olsun. ConsoleLogger<T> sınıfı Console.WriteLine("[INF] " + message) yapsın. DebugLogger<T> sınıfı System.Diagnostics.Debug.WriteLine çağrısı yapsın. Main'de her iki günlükleyiciden birer örnek yarat ve LogInformation çağrısı yap; Console'a "Konsola yazıldı", Debug'a "Hata ayıklayıcıya yazıldı" iletisi ver.

Ö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 DebugLogger<T> : ILogger<T> { public void LogInformation(string message) => Debug.WriteLine("[INF] " + message); } yaz. Main'de: var c = new ConsoleLogger<Program>(); c.LogInformation("Konsola yazıldı"); var d = new DebugLogger<Program>(); d.LogInformation("Hata ayıklayıcıya yazıldı");
Örnek çözüm:
using System;
using System.Diagnostics;

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

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

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

class Program
{
    static void Main()
    {
        var console = new ConsoleLogger<Program>();
        console.LogInformation("Konsola yazıldı");
        var debug = new DebugLogger<Program>();
        debug.LogInformation("Hata ayıklayıcıya yazıldı");
    }
}

Kendini test et

  1. Visual Studio Çıktı penceresine yazan sağlayıcı hangisidir?

    • DebugLoggerProvider
    • ConsoleLoggerProvider
    • FileLoggerProvider
    • EventLogLoggerProvider
    Cevabı göster

    DebugLoggerProvider — Doğru. DebugLoggerProvider System.Diagnostics.Debug üzerinden hata ayıklayıcıya yazar.

  2. Sağlayıcıları hedefiyle eşleştir

    ConsoleLoggerProvider
    Konsol penceresi
    DebugLoggerProvider
    Hata ayıklayıcı çıktısı
    AddConsole
    Konsol sağlayıcısı ekler
    AddDebug
    Debug sağlayıcısı ekler
  3. Sağlayıcı ekleme çağrısını tamamla

    loggerFactory.Add____();
    Cevabı göster
    loggerFactory.AddConsole();

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