355 Stimmen

log4net vs. Nlog

Hat jemand Erfahrung mit beidem? Wie schneiden sie im Vergleich zueinander ab?

Wir planen, eines davon für die Protokollierung in einer Unternehmensanwendung zu verwenden.

Referenzen:

log4net

nlog

EDIT: Wir haben keine bestehenden Abhängigkeiten zu nlog oder log4net.

383voto

Matt Punkte 4368

Vor kurzem wurde ich beauftragt, für ein bevorstehendes Projekt einen Prototyp für ein Holzscheit zu erstellen. Ich hatte keine Erfahrung mit Logging-Frameworks. Ich recherchierte, lief durch Tutorials, machte Spielzeug-Anwendungen, etc. auf Log4Net, NLog, und Enterprise Library für ein paar Tage. 3-4 Wochen später kam ich zurück und fügte sie zu einer zusammenhängenden Demo zusammen. Ich hoffe, dass einige dieser Informationen für Sie nützlich sind.

Meine Empfehlung für unser Projekt lautet wie folgt:

  1. Verwenden Sie eine Protokollierungsfassade (z. B. Common.Logging , SimpleLoggingFacade ), um direkte Abhängigkeiten zu vermeiden.
  2. Wenn wir die Enterprise Library für andere Einrichtungen verwenden, sollten wir sie auch für die Protokollierung einsetzen.
  3. Wenn wir am Ende etwas verwenden, das von Log4Net abhängig ist, verwenden Sie Log4Net.
  4. Wenn keiner der oben genannten Punkte zutrifft, verwenden Sie NLog. Was ich bevorzugen würde.

Das beruht auf diesen Erkenntnissen (Meinungen!):

  • Alle 3 Frameworks sind fähig und können einige anspruchsvolle Dinge tun. Wir wollen eine qualitativ hochwertige Lösung, aber offen gesagt brauchen wir keine extrem hohe Leistung oder 60 Arten von Ereignissen.
  • Alle 3 haben sehr ähnliche Grundkonzepte.
  • Jede hat ihre eigenen coolen Tricks, wie z. B. ein wirklich fortschrittliches Routing oder dynamische Log-Dateinamen, das Kürzen von Dateien, usw.
  • Alle 3 sind auf ihre Weise ziemlich gut dokumentiert.
  • Für einen völligen Neuling wie mich waren sie anfangs alle ein wenig unangenehm. Bei den Grundlagen gibt es keine drastischen Unterschiede. Ich bin darüber hinweggekommen.
  • Als ich einige Wochen später erneut nachhakte, war NLog eindeutig am leichtesten wieder aufzunehmen. Ich brauchte nur sehr wenig Auffrischung. Bei Log4Net musste ich ein paar Online-Beispiele nachschlagen, um loszulegen. Bei EntLib habe ich aufgegeben und die Tutorials noch einmal ganz von vorne gemacht - ich war völlig verloren.
  • Ich konnte nicht herausfinden, wie ich EntLib dazu bringe, einige Dinge zu tun, wie z.B. sich in der Datenbank anzumelden. Es könnte einfach sein, aber es war jenseits meines Zeitlimits.
  • Log4Net und NLog haben einen kleinen In-Code-Fußabdruck. EntLib ist spammy, aber ich würde eine Fassade über sie sowieso verwenden.
  • Ich habe EntLib versehentlich falsch konfiguriert und es hat mich zur Laufzeit darauf hingewiesen. Log4Net tat dies nicht. Bei NLog habe ich nicht versehentlich eine falsche Konfiguration vorgenommen.
  • EntLib kommt mit einem gut aussehenden app.config-Editor, den Sie zu 100% brauchen. NLog hat ein Schema für die Konfigurationsdatei, so dass Sie "Intellisense" erhalten. Log4Net kommt mit nada.

Offensichtlich gefällt mir NLog bis jetzt. Allerdings nicht genug, um es zu benutzen, obwohl eine andere Lösung verfügbar ist.

158voto

Jay Cincotta Punkte 4062

Ein wichtiger Aspekt, über den noch nicht viel gesprochen wurde, sind Support und Updates.

Log4Net wurde seit der Veröffentlichung von Version 1.2.10 am 19. April 2006 nicht mehr aktualisiert. .

Im Gegensatz dazu wird NLog seit 2006 aktiv unterstützt und wird demnächst veröffentlicht NLog 2.0 unterstützt viele Plattformen, die bei der letzten Aktualisierung von log4net noch nicht existierten wie zum Beispiel:

  • NET Framework 2.0 SP1 und höher, 3.5 & 4.0 (Client- und erweiterte Profile)
  • Silverlight 2.0, 3.0, 4.0
  • .NET Compact Framework 2.0, 3.5
  • Mono 2.x Profil

97voto

Narayan Akhade Punkte 2664

Nachdem ich vor kurzem Erfahrungen mit beiden Rahmenwerken gemacht habe, dachte ich, ich könnte meine Ansichten zu beiden Rahmenwerken mitteilen.

Ich wurde gebeten, die Logging-Frameworks für eine bestehende Webanwendung zu bewerten. Ich habe meine Auswahl auf NLog (v2.0) und log4net (v1.2.11) eingegrenzt, nachdem ich verschiedene Online-Foren durchforstet hatte. Hier sind meine Ergebnisse:

  1. Das Einrichten und Starten von NLog ist kinderleicht. Gehen Sie die Anleitung "Erste Schritte" auf der Website durch und Sie sind fertig. Man bekommt eine gute Vorstellung davon, wie die Dinge mit nlog ablaufen könnten. Die Konfigurationsdatei ist so intuitiv, dass jeder die Konfiguration verstehen kann. Ein Beispiel: Wenn Sie die interne Protokollierung einschalten wollen, setzen Sie das Flag im Header-Knoten der Nlog-Konfigurationsdatei, also dort, wo Sie es erwarten würden. In log4net setzen Sie verschiedene Flags im Abschnitt appSettings der web.config.

  2. In log4net wird bei der internen Protokollierung kein Zeitstempel ausgegeben, was ärgerlich ist. In Nlog erhalten Sie ein schönes Protokoll mit Zeitstempeln. Ich fand es sehr nützlich in meinen Auswertungen.

  3. Filter in log4net - Überprüfen Sie besser meine Frage - log4net filter - wie man AND-Filter schreibt, um Logmeldungen zu ignorieren und wenn Sie eine Antwort/Lösung für dieses Problem finden, lassen Sie es mich bitte wissen. Ich verstehe, dass es eine Lösung für diese Frage gibt, da Sie Ihren eigenen benutzerdefinierten Filter schreiben können. Aber etwas, das nicht leicht in log4net verfügbar ist.

  4. Leistung - Ich habe mit einer gespeicherten Prozedur etwa 3000 Protokollmeldungen in der Datenbank gespeichert. Ich verwendete eine einfache for-Schleife (int i=0; i<3000; i++...), um dieselbe Nachricht 3000 Mal zu protokollieren. Für die Schreibvorgänge benötigte log4net AdoAppender fast doppelt so viel Zeit wie NLog.

  5. Log4net unterstützt keine asynchronen Appender.

Dieser Vergleich war für mich ausreichend, um NLog als Logging-Framework zu wählen :)

36voto

Jeremy Punkte 481

Für alle, die diesen Thread erst spät entdeckt haben, lohnt es sich, einen Blick zurück auf die .Net Base Class Library (BCL) zu werfen. Viele Leute haben die Änderungen zwischen .Net 1.1 und .Net 2.0 verpasst, als die TraceSource Klasse eingeführt wurde (ca. 2005).

Die Verwendung der TraceSource ist vergleichbar mit anderen Logging-Frameworks, mit granularer Kontrolle der Protokollierung, Konfiguration in app.config/web.config und programmatischem Zugriff - ohne den Overhead des Enterprise Application Blocks.

Es gibt auch eine Reihe von Vergleichen, die im Umlauf sind: "log4net vs TraceSource"

34voto

Florian Doyon Punkte 3936

Für uns liegt der Hauptunterschied in der Gesamtleistung...

Werfen Sie einen Blick auf Logger.IsDebugEnabled in NLog gegenüber Log4Net. Unsere Tests haben ergeben, dass NLog weniger Overhead hat, und das ist es, was wir wollen (Dinge mit niedriger Latenz).

Zum Wohl, Florian

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X