Logging in C# (.NET): Überblick über 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 in C# (.NET): Überblick über die besten Lösungen und Bibliotheken

Logging ist nicht einfach nur das Schreiben von Nachrichten in eine Datei. In der modernen Entwicklung mit C# (.NET) ist es ein leistungsstarkes Werkzeug für Monitoring, Debugging und Analyse des Anwendungsverhaltens. Richtig konfiguriertes Logging ermöglicht es, Fehler schnell zu finden, die Leistung zu überwachen und Analysen zu erstellen. In diesem Artikel betrachten wir die beliebtesten und effektivsten Bibliotheken für .NET sowie die besten Praktiken für deren Einsatz.



Warum ist professionelles Logging notwendig?

Basis Console.WriteLine oder Debug.Write sind für die Produktionsumgebung nicht geeignet. Echte Logging-Frameworks bieten:

  • Log-Level (Trace, Debug, Information, Warning, Error, Critical) – Filterung der Nachrichtenwichtigkeit.
  • Strukturierte Daten – Logs im JSON-Format, die leicht zu parsen sind (ELK, Splunk).
  • Mehrere Senken (Sinks/Targets) – Schreiben in Datei, Konsole, Datenbank, Cloud-Dienste (Azure, AWS).
  • Konfiguration – Anpassung des Verhaltens ohne Neukompilierung des Codes.
  • Asynchronität – Minimierung der Auswirkungen auf die Anwendungsleistung.


Top-Bibliotheken für .NET

Betrachten wir vier Hauptlösungen, die im .NET-Ökosystem dominieren.



1. Serilog – Standard für strukturiertes Logging

Serilog ist die beliebteste Bibliothek für .NET, die als erste das Konzept des strukturierten Loggings populär gemacht hat. Anstatt Strings zusammenzufügen, übergeben Sie eine Vorlage und Parameter, was die Speicherung von Daten in einem maschinenlesbaren Format ermöglicht.

Hauptfunktionen:

  • Tiefe Integration mit .NET Core / .NET 5+.
  • Große Anzahl von Sinks (Serilog.Sinks.Console, Serilog.Sinks.File, Serilog.Sinks.ElasticSearch).
  • Unterstützung von Enrichers zum automatischen Hinzufügen von Kontext (Maschinenname, Anwendungsversion, ThreadId).
  • Saubere und prägnante API.


Beispiel für die Konfiguration und Verwendung von Serilog:

using Serilog;

// Konfiguration in Program.cs (.NET 6+)Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() .WriteTo.Console() .WriteTo.File("logs/app-.log", rollingInterval: RollingInterval.Day) .Enrich.WithMachineName() .CreateLogger();

try{ Log.Information("Anwendung gestartet"); var userId = 123; Log.Information("Benutzer {UserId} hat sich angemeldet", userId); // Beispiel mit Ausnahme throw new InvalidOperationException("Testfehler");}catch (Exception ex){ Log.Error(ex, "Ein kritischer Fehler ist in Methode {Method} aufgetreten", nameof(Main));}finally{ Log.CloseAndFlush();}


2. NLog – flexibel und leistungsstark

NLog ist eines der ältesten Frameworks, das hervorragend mit hochbelasteten Systemen zurechtkommt. Seine Hauptstärke ist die flexible Regelweiterleitung (rules) und die integrierte Unterstützung für asynchrones Schreiben "out of the box".

Schlüsselfunktionen:

  • Unterstützung für XML-, JSON- und codebasierte Konfiguration.
  • Integrierte Unterstützung für Log-Rotation nach Größe und Zeit.
  • Erweiterbarkeit durch benutzerdefinierte Targets.
  • Geringerer Speicherverbrauch im Vergleich zu Serilog in einigen Szenarien.


Beispiel für die Konfiguration von NLog über Code:

using NLog;using NLog.Config;using NLog.Targets;

// Logger-Konfigurationvar config = new LoggingConfiguration();var consoleTarget = new ConsoleTarget("console");config.AddRule(LogLevel.Info, LogLevel.Fatal, consoleTarget);

var fileTarget = new FileTarget("file"){ FileName = "${basedir}/logs/${shortdate}.log", Layout = "${longdate} | ${level:uppercase=true} | ${message} ${exception:fo

Empfehlungen