NLog vs log4net

Sowohl NLog als auch log4net sind zwei sehr beliebte Optionen bei der Auswahl eines Protokollierungsframeworks für .NET-Anwendungen. In diesem Beitrag erfahren Sie alles über beide Frameworks und die Unterschiede. Für diejenigen unter Ihnen, die eines oder beide Frameworks nicht kennen, beginnen wir mit ein paar Worten zu jedem Framework.

log4net

log4net ist wahrscheinlich das älteste Protokollierungsframework auf dem Block und existiert seit der Einführung von .NET. log4net war ursprünglich ein interner Apache log4j-Port, der 2001 von Neoworks Limited entwickelt wurde. Das Projekt wechselte schnell zu Sourceforge (dem GitHub von 2001) und wurde unter der Apache-Lizenz veröffentlicht. Seit dieser Zeit ist log4net eine der beliebtesten Optionen in der .NET-Welt, um Anwendungen Protokollierung hinzuzufügen.

log4net arbeitet mit dem Konzept von Appendern, bei denen Protokollnachrichten an verschiedene Datenspeicher weitergeleitet werden können. Viele Appender wurden im Laufe der Jahre implementiert, wie die Protokollierung im Dateisystem, SQL Server, HTTP-Endpunkte und sogar NoSQL-Datenbanken, jedoch unstrukturierte Textnachrichten, log4net und NoSQL gehen nicht genau Hand in Hand.

NLog

Während log4net schnell zur Standardauswahl wurde, tauchten Alternativen auf. Der wahrscheinlich erste echte Konkurrent der Dominanz von log4net war NLog. Ursprünglich von Jarek Kowalski entwickelt und mit Pull-Anfragen von fast 100 Personen ist NLog eine großartige Alternative. Während log4net ab 2006 ziemlich stillstand, ging NLog einfach weiter. Während Jarek beim Start bei Google den Stecker zu ziehen schien, schien die Community zu wachsen und neue Releases fließen immer noch.

Wie log4net enthält NLog mehrere Protokollziele und kann Nachrichten in verschiedenen Datenspeichern protokollieren.

Konfiguration

Alle Protokollierungsframeworks benötigen eine Konfiguration, damit das Framework weiß, was wo protokolliert werden soll.

log4net

log4net wird über Ihre App konfiguriert.konfigurationsdatei oder ein dediziertes log4net.config:

NLog

NLog kann sowohl über XML als auch über C # konfiguriert werden. Die meisten Leute benutzen XML, da das von Anfang an da war und da die C # -basierte API nicht so nett ist wie neuere Frameworks wie Serilog.

Protokollierungsnachrichten

Wenn es um die Protokollierung von Nachrichten aus Ihrer Anwendung geht, funktionieren log4net und NLog ziemlich ähnlich.

log4net

Protokollnachrichten werden mit der log4net-API geschrieben:

var log = LogManager.GetLogger(typeof(Bar));log.Debug("Hello World");

Zusätzliche Protokollinformationen können mithilfe verschiedener Kontextoptionen an eine Protokollnachricht angehängt werden:

Mit log4net können Sie Informationen zwar direkt in Protokollnachrichten einbetten, die semantische Protokollierung wird jedoch nicht unterstützt.

NLog

NLog bietet eine API ähnlich log4net zum Protokollieren von Nachrichten an den konfigurierten Satz von Zielen:

var logger = NLog.LogManager.GetCurrentClassLogger();logger.Debug("Hello World");

Zusätzliche Eigenschaften können ebenfalls angehängt werden:

var msg = new LogEventInfo(LogLevel.Debug, "", "Hello World");msg.Properties.Add("Application", "MyCoolApp");logger.Debug(msg);

Die aktuelle Version von NLog unterstützt die semantische Protokollierung. Verwenden Sie die geschweifte Klammer-Syntax, um Ihren Protokollnachrichten Semantik hinzuzufügen:

logger.Info("Order {orderid} created for {user}", 42, "Kenny");

Fazit

Die Auswahl eines Gewinners ist nicht das Ziel dieses Beitrags. Beide Protokollierungsframeworks haben ihre eigenen Vor- und Nachteile.

log4net

Vorteile