Benchmarking 5 beliebte .NET-Protokollierungsbibliotheken

Mehrere Protokollierungs-Frameworks versprechen .NET-Programmierern eine „fünfminütige Setup- und Startprotokollierungslösung“ für ihre Projekte. Wir haben uns entschlossen, diese Frameworks zu testen, um Geschwindigkeit und Komfort zwischen ihnen zu ermitteln. Wir haben die Gleichung noch komfortabler gestaltet, da die meisten .NET-Programmierer wissen, dass sie Ereignisse in die Windows-Ereignisanzeige schreiben können, ohne zusätzliche Bibliotheken implementieren zu müssen. Dies ist der ultimative Komfort und Zuverlässigkeit. Das Schreiben in die Ereignisanzeige funktioniert jedoch für einige Anwendungen nicht immer – Sie möchten beispielsweise Ereignisse in eine Protokolldatei schreiben, um sie für andere Abteilungen freizugeben, oder Analysen für eine Gruppe von Protokollen ausführen.

Welche Logging-Frameworks wir getestet haben

Wir haben uns entschieden, die fünf besten Logging-Frameworks auf dem Markt zu testen:

  • Log4net
  • ELMAH
  • NLog
  • Microsoft Enterprise Library
  • NSpring

Wenn Sie jemals mit Enterprise Logging für .NET gearbeitet haben, erkennen Sie wahrscheinlich eine oder zwei dieser Bibliotheken. Für diesen Test haben wir Fehlerereignisse für jeden Framework-Test in Dateien geschrieben, obwohl ELMAH automatisch in Dateien schreibt, es sei denn, Sie weisen es ausdrücklich an, sich bei SQL anzumelden. ELMAHS SQL-Integration macht es zu einem unserer persönlichen Favoriten, aber wir wollten das Spielfeld auf Augenhöhe halten und nur lokale Dateien verwenden.

Unsere Testumgebung

Wir wollten diesen Benchmark-Tests eine Umgebung geben, die repräsentativ für die reale Welt ist, also haben wir sie auf einem Server getestet, der drei Webanwendungen hostet. Die Umgebung hostet auch SQL Server und MySQL für die drei Anwendungen. Um die CPU-Auslastung zu simulieren, haben wir immer noch einen separaten Thread-Prozess eingerichtet, der Primzahlen generiert, während die Tests ausgeführt und zeitlich festgelegt wurden. Die Arbeitsumgebung macht höhere Zahlen aus als andere Benchmarks, aber wir finden, dass sie realitätsgetreuer ist als die einfache Generierung von Primzahlen.

Unser Produktionsserver ist ein Windows 2008-Server mit 8 GB RAM und einem i5-Intel-Prozessor mit vier Kernen, einem Kern für jeden Thread. Die Anwendungen wurden mit Visual Studio 2012 erstellt. Log4net, NLog, Microsoft Enterprise Library und NSpring wurden alle auf Konsolenanwendungen verglichen. ELMAH ist ein Weblogger, daher wurde diese Anwendung für eine Webanwendung in .NET 4.5 ausgeführt. Wir haben auch C # als primäres Sprachframework verwendet.

Wir haben nicht viele Konfigurationen an den Frameworks selbst vorgenommen. Wir haben uns für Bibliotheken entschieden, die in NuGet verfügbar sind, sodass Entwickler keine spezifischen Bibliotheken herunterladen und DLLs und Lösungen von Drittanbietern in das Hauptprojekt integrieren mussten.

Das Projekt bestand nur aus den notwendigen Bibliotheken für .NET, um den Code zu kompilieren und auszuführen. Der Code enthielt eine Schleife, die 100.000 Schreib-Debug-Ereignisse für jedes Framework durchlief. Eine separate Methode behandelte den Primzahl-Thread.

Wir haben drei Tests für jedes Framework durchgeführt und die durchschnittlichen Ergebnisse verwendet.

Unsere Testergebnisse

Schauen Sie sich zuerst die folgende Grafik an und Sie werden den klaren Gewinner sehen.

netchart

NLog war die schnellste, und wir müssen sagen, dass es eine der bequemsten Protokollierungsmethoden war. NLog stand wirklich zu seiner Behauptung, dass Sie Ereignisse in wenigen Minuten protokollieren können. Um NLog mit der Anwendung arbeiten zu lassen, wurden zwei Codezeilen benötigt: eine Zeile zum Instanziieren der Hauptloggerklasse und die andere zum Protokollieren der Ereignisse. Es war nicht nur einfach einzurichten, sondern dauerte auch nur etwa 9 Sekunden, um 100.000 Iterationen abzuschließen.

Log4net war genauso praktisch, verlor aber an Leistung. Wir haben sowohl Debug- als auch Fehlerereignisse mit log4net ausprobiert, und die Debug-Protokollierung war tatsächlich schneller als Standardfehlerereignisse. Im Vergleich zu seinen Mitbewerbern könnte log4net einige Leistungsverbesserungen der Entwickler insbesondere für Unternehmensanwendungen nutzen. Es war genauso praktisch wie NLog, aber es konnte nicht mit der Leistung mithalten.

Unser dritter Favorit ist NSpring. NSpring war einfach einzurichten, aber es erforderte viel mehr Code, um damit zu arbeiten. Sie müssen NSpring Logger-Ereignisse öffnen und schließen, was Sie nicht mit den anderen tun müssen. Ein paar weitere Codezeilen in einer einfachen Anwendung sind nicht allzu mühsam, aber das Öffnen und Schließen von Loggervariablen kann für Unternehmensanwendungen mühsam sein.

Von den Frameworks, die wir in einer Konsolenanwendung getestet haben, war die native Microsoft Enterprise Library unser geringster Favorit. Es hat die zweitschnellsten Zeiten, aber es war äußerst unbequem. Microsoft hat kürzlich die Funktionsweise seines Frameworks von Version 5 auf 6 geändert. In Version 5.0 konnte der Codierer einen statischen Aufruf von Protokollfunktionen ausführen, aber wir stießen auf zahlreiche Hindernisse, um EntLib mit Version 6.0 zum Laufen zu bringen. Die Einrichtungszeit für EntLib degradiert diese Bibliothek, obwohl sie die zweitschnellste war.

Der endgültige Rahmen ist ELMAH. ELMAH war ursprünglich unser Favorit, bis wir NLog getestet haben. ELMAH ist ein Weblogger und funktioniert daher etwas anders als die anderen. Es schreibt standardmäßig in eine XML-Datei, was auch einige seiner Verzögerungen erklären könnte.

Fazit

Bei anspruchsvollen Anwendungen, die Dateiprotokollierung und Geschwindigkeit erfordern, war NLog eindeutig der Gewinner. NLog hat auch gute Unterstützung von der Community mit Integrationen für Log-Management-Lösungen wie Loggly. Wenn aus irgendeinem Grund NLog nicht Ihre Wahl ist, gehen Sie stattdessen mit NSpring. Diese beiden Frameworks sind eindeutig die schnellsten. Wir hätten log4net als unsere erste Wahl gewählt, wenn nicht die langsame Leistung gewesen wäre. Es war eines der am einfachsten einzurichten.

Alle diese Frameworks sind in NuGet verfügbar, sodass Sie sie selbst ausprobieren können.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.