Logging für C# (.NET): Die besten Lösungen und Bibliotheken

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Logging für C# (.NET): Überblick über die besten Lösungen



Logging ist ein kritisch wichtiger Aspekt der Entwicklung jeder ernsthaften Anwendung in C#. Es ermöglicht die Überwachung des Systemzustands, die Diagnose von Fehlern, die Analyse des Benutzerverhaltens und die Erfassung von Leistungsmetriken. Im .NET-Ökosystem gibt es mehrere ausgereifte Bibliotheken für das Logging, jede mit ihren eigenen Stärken. In diesem Artikel betrachten wir die drei beliebtesten Lösungen: Serilog, NLog und log4net sowie die Standardabstraktion Microsoft.Extensions.Logging.



Warum eine separate Bibliothek für das Logging?



Die integrierte Klasse System.Diagnostics.Debug oder Console.WriteLine eignet sich nur für die einfachsten Szenarien. Professionelle Bibliotheken bieten:

  • Logging-Stufen (Trace, Debug, Information, Warning, Error, Fatal) — flexible Filterung von Nachrichten.
  • Strukturiertes Logging — Speicherung von Daten im JSON-Format mit der Möglichkeit der späteren Analyse.
  • Viele "Senken" (sinks/targets) — Schreiben in Datei, Datenbank, Konsole, ELK-Stack, Sentry, Application Insights usw.
  • Dynamische Konfiguration — Änderung der Logging-Stufe ohne Neustart der Anwendung.
  • Leistung — asynchrones Schreiben, Pufferung, minimale Auswirkung auf die Geschwindigkeit.


1. Serilog — moderner Standard



Serilog ist die beliebteste Bibliothek für .NET, die auf strukturiertes Logging setzt. Anstatt Strings mit string.Format zu formatieren, verwenden Sie benannte Platzhalter:



using Serilog;

Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.Console() .WriteTo.File("logs/app-.log", rollingInterval: RollingInterval.Day) .WriteTo.ApplicationInsights(TelemetryConfiguration.Active, TelemetryConverter.Traces) .CreateLogger();

// Beispiel für strukturiertes LoggingLog.Information("Benutzer {UserId} hat Bestellung {OrderId} über {Total:C} ausgeführt", userId, orderId, total);


Serilog ist ideal für Microservices, Cloud-Anwendungen und Projekte, bei denen eine tiefgehende Log-Analyse über Kibana oder Grafana wichtig ist.



2. NLog — Flexibilität und Leistung



NLog ist eine leistungsstarke Bibliothek mit umfangreichen Routing-Möglichkeiten. Sie unterstützt sowohl XML-Konfiguration als auch programmatische Einrichtung. Eine Besonderheit von NLog ist der integrierte Mechanismus für asynchrones Schreiben und die Unterstützung von bedingten Regeln.



using NLog;

private static readonly Logger Logger = LogManager.GetCurrentClassLogger();

public void ProcessOrder(Order order){ Logger.Info("Start der Verarbeitung der Bestellung {OrderId}", order.Id); try { // Geschäftslogik Logger.Debug("Bestellung {OrderId} erfolgreich verarbeitet", order.Id); } catch (Exception ex) { Logger.Error(ex, "Fehler bei der Verarbeitung der Bestellung {OrderId}", order.Id); throw; }}


NLog wird aufgrund der einfachen Migration von log4net häufig für Desktop-Anwendungen (WPF, WinForms) und Legacy-Projekte gewählt.



3. log4net — bewährter Veteran



log4net ist ein Port der beliebten Java-Bibliothek log4j. Es ist die "älteste" Lösung, die immer noch aktiv in Unternehmensprojekten verwendet wird. Der Hauptvorteil ist die enorme Anzahl von Adaptern und "Appendern", die über Jahrzehnte geschrieben wurden.



// Konfiguration über XML (log4net.config)<log4net>    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">        <file value="logs/app.log" />        <rollingStyle value="Date" />        <datePattern value="yyyyMMdd" />                    

Empfehlungen