Was ist der Unterschied zwischen log4net und ELMAH?


108

Einige Leute verwenden ELMAH anstelle von log4net. Was macht es besser?

Ich habe in einer Antwort auf die Frage zum Stapelüberlauf von ELMAH erfahren. Wie melde ich mich in C # an?



Ändert sich das Szenario, nachdem der .net-Kern im Bild ist? (elmah unterstützt ab Januar 2018 keinen .net-Kern).
Chaitanya Gadkari

Antworten:


92

ELMAH dient dazu, Fehler und Ausnahmen für Ihre Webanwendungen zu verfolgen, und ermöglicht es Ihnen, diese Ausnahmen über viele verschiedene Mechanismen (SQL, RSS, Twitter, Dateien, E-Mail usw.) einfach zu protokollieren oder anzuzeigen. Wenn Sie keine integrierte Ausnahmebehandlung haben, wird ELMAH Ihnen höchstwahrscheinlich das bieten, wonach Sie in Bezug auf die Ausnahmebehandlung in einer Webanwendungsumgebung suchen.

Log4net kann auch für die Ausnahmeprotokollierung verwendet werden. Möglicherweise müssen Sie jedoch Ihre eigenen Handler rollen, um eine Verbindung zu Ihrer Webanwendung herzustellen. Log4net leuchtet über ELMAH, wenn Sie andere Arten der Informationsprotokollierung durchführen müssen, da log4net ein universelles Protokollierungsframework ist. Log4net kann auch in fast jeder .NET-Anwendung verwendet werden.


3
log4net gibt Ihnen mehr Kontrolle.
DarthVader

6
Mit diesem ELMAH Appender für log4net können Sie das Beste aus beiden Welten herausholen. Protokollieren Sie einfach, was Sie möchten (Debug, Info, Warnung, Fehler) mit log4net, aber speichern Sie es in ELMAH nuget.org/packages/elmahappender_log4net_1.2.10
Sturla

111

Log4Net ist ein universelles Protokollierungsframework mit einer API, die in Ihrer Anwendung (Web, Konsole, DLL usw.) verwendet werden soll.

logger.Debug("Some low level debug message...");
logger.Info("Some basic info");
logger.Warn("Some business logic problem, but not critical");
logger.Error("An unexpected error");

ELMAH ist ein unauffälliges IIS-Plugin speziell zum Protokollieren von Ausnahmen in einer Webanwendung. In Ihrer Anwendung wird kein Verweis auf ELMAH angezeigt. Es gibt keine API, mit der Sie interagieren. Es verwendet die Modul- und Handler-IIS-Erweiterungspunkte, um das Verhalten zu verbessern. Darüber hinaus verfügt es über ein Web-Front-End, um die in Ihrer Webanwendung aufgetretenen Fehler anzuzeigen. Log4Net verfügt nicht über ein Front-End, sondern nur über eine Vielzahl von Protokollsenken (Appendern), mit denen Sie Ihre Protokollnachrichten an Protokolldateien, einen Syslog-Server, eine Datenbank usw. senden können.


23
Eine Korrektur, Elmah hat eine API, mit der der Entwickler interagieren kann. Zum Beispiel wird die Signalisierung durch die Elmah Api erreicht.
Ed DeGagne

8
Noch eine Korrektur? ELMAH ist ein .NET HttpModule / HttpHandler. Es ist KEIN IIS-Plugin. ARR ist ein Plugin. Nicht ELMAH.
Maxime Rouiller

Wie ist Ihre Antwort auf die Kommentare?
Peter Mortensen

36

Der Hauptunterschied besteht darin, dass ELMAH nicht behandelte Anwendungsausnahmen protokolliert. log4net protokolliert alles, was Sie ihm zum Protokollieren sagen. Sie können log4net so konfigurieren, dass nicht behandelte Ausnahmen protokolliert werden. ELMAH erfasst jedoch sofort eine Fülle nützlicher Informationen.


1
ELMAH erfasst eine Vielzahl nützlicher Informationen sofort, wenn Sie sie richtig konfigurieren. Für die gleiche Zeit können Sie dasselbe mit log4net mit mehr Kontrolle tun.
DarthVader

DarthVader - Haben Sie eine log4net-Beispielkonfiguration, die dasselbe tut?
JasonD

5
ELMAH erfasst eine Fülle nützlicher Informationen sofort ohne Konfiguration. Mit der zusätzlichen Konfiguration werden sowohl nicht behandelte als auch behandelte Ausnahmen behandelt.
Trevor de Koekkoek

5

ELMAH erstellt ein HTTP-Modul, das sich in Fehlerereignisse einbindet und anschließend protokolliert. Dies kann leicht durch schlechtes Design vereitelt und gebrochen werden. Log4Net erfordert möglicherweise zusätzliche Arbeit im Voraus. Wenn Sie jedoch ein AOP-Framework verwenden und es auf Ihre Klasse oder sogar die Assembly anwenden, können Sie mit sehr wenig Code und Aufwand eine weitaus bessere Ausnahmeprotokollierung erzielen.

ELMAH funktioniert nur, wenn es Zugriff auf HttpContext hat, was in WCF-Diensten schwer zu erreichen sein kann. Sie würden also sowieso einen anderen Logger in WCF verwenden. Warum nicht einfach eine Lösung verwenden, die universeller ist?



1

ELMAH wird speziell für Webanwendungen verwendet, während log4net sowohl für Web- als auch für Windows-Anwendungen verwendet wird. ELMAH bietet in einer Webanwendung viel mehr Vorteile als log4net.


5
Was sind diese Vorteile? Ich werde bald ASP.NET machen, daher würde ich gerne Ihre fundierte Meinung erfahren. Ich bin noch Anfänger in .NET, daher ist es für mich schwieriger zu interpretieren, was sie auf ihren Websites sagen.
IAdapter

Sie können Berichte auch ohne Code anzeigen. Siehe elmah Funktionen hier code.google.com/p/elmah
Adeel

Elmah ist sehr begrenzt und der einzige "Vorteil" sind die Berichte, aber es ist auf Web-Apps beschränkt, die Zugriff auf HttpContext haben. Andere Protokollierer können Daten in vielen anderen Quellen protokollieren, über die berichtet werden kann.
Dustin Davis

0

ELMAH ist sehr mächtig, aber auch sehr spezifisch in dem, was es tut. Es macht eine Menge Arbeit für Sie, während ich glaube , Log4Net erfordert Sie die Fehlerbehandlung und die Protokollierung zu tun.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.