Quelle est la différence entre log4net et ELMAH?

108

Certaines personnes utilisent ELMAH au lieu de log4net. Qu'est-ce qui le rend meilleur?

J'ai découvert ELMAH dans une réponse à la question de Stack Overflow Comment puis-je me connecter en C #?

IAdapter
la source
duplication possible de stackoverflow.com/questions/800009/…
empi
Maintenant que le noyau .net est en image, le scénario change-t-il? (elmah ne prend pas en charge .net core à partir de janvier 2018).
Chaitanya Gadkari

Réponses:

92

ELMAH sert à suivre les erreurs et les exceptions pour vos applications Web et vous permet de facilement enregistrer ou afficher ces exceptions via de nombreux mécanismes différents (SQL, RSS, Twitter, fichiers, e-mail, etc.). Si vous n'avez pas de gestion des exceptions intégrée, ELMAH vous fournira probablement ce que vous recherchez en termes de gestion des exceptions dans un environnement d'application Web.

Log4net peut également être utilisé pour la journalisation des exceptions, mais vous devrez peut-être déployer vos propres gestionnaires pour vous connecter à votre application Web. Log4net brillera sur ELMAH si vous devez effectuer d'autres types de journalisation des informations, car log4net est un cadre de journalisation à usage général. Log4net peut également être utilisé dans presque toutes les applications .NET.

Mark Coleman
la source
3
log4net vous donne plus de contrôle.
DarthVader
6
Vous pouvez obtenir le meilleur des deux mondes en utilisant cet Appender ELMAH pour log4net. Enregistrez simplement ce que vous aimez (débogage, info, avertissement, erreur) avec log4net mais stockez-le dans ELMAH nuget.org/packages/elmahappender_log4net_1.2.10
Sturla
111

Log4Net est un framework de journalisation à usage général avec une API destinée à être utilisée dans votre application (web, console, dll, etc.).

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 est un plugin IIS discret spécialement pour la journalisation des exceptions dans une application Web. Vous ne verrez pas de référence à ELMAH dans votre application, elle n'a pas d'API avec laquelle vous interagissez. Il utilise les points d'extension IIS du module et du gestionnaire pour verrouiller le comportement. En outre, il dispose d'un frontal Web pour afficher les erreurs qui se sont produites dans votre application Web. Log4Net n'a pas de frontal, juste une variété de récepteurs de journaux (Appenders) qui peuvent envoyer vos messages de journal à des éléments tels que des fichiers journaux, un serveur syslog, une base de données, etc.

Mike Valenty
la source
23
Une correction, Elmah a une API avec laquelle le développeur peut interagir. Par exemple, la signalisation est réalisée via Elmah Api.
Ed DeGagne
8
Une autre correction? ELMAH est un HttpModule / HttpHandler .NET. Ce n'est PAS un plugin IIS. ARR est un plugin. Pas ELMAH.
Maxime Rouiller
Quelle est votre réponse aux commentaires?
Peter Mortensen
36

La principale différence est que ELMAH enregistre les exceptions d'application non gérées; log4net enregistre tout ce que vous lui demandez d'enregistrer. Vous pouvez configurer log4net pour enregistrer les exceptions non gérées, mais ELMAH capture une mine d'informations utiles prêtes à l'emploi.

Jamie Ide
la source
1
ELMAH capture une mine d'informations utiles hors de la boîte, si vous configurez correctement. pour la même durée, vous pouvez faire la même chose avec log4net avec plus de contrôle.
DarthVader
DarthVader - avez-vous un exemple de configuration log4net qui fait la même chose?
JasonD
5
ELMAH capture une mine d'informations utiles hors de la boîte sans configuration. Avec une configuration supplémentaire, il gérera à la fois les exceptions non gérées et les exceptions gérées.
Trevor de Koekkoek
5

ELMAH fonctionne en créant un module HTTP qui se connecte aux événements d'erreur, puis se connecte. Cela peut facilement être contrecarré et brisé par une mauvaise conception. Log4Net peut nécessiter un travail supplémentaire au départ, mais si vous utilisez un framework AOP et que vous l'appliquez à travers votre classe ou même l'assembly, vous pouvez obtenir une journalisation des exceptions bien meilleure avec très peu de code et d'effort.

ELMAH ne fonctionne que s'il a accès à HttpContext, ce qui peut être difficile à réaliser dans les services WCF. De toute façon, vous finiriez par utiliser un autre enregistreur dans WCF. Pourquoi ne pas utiliser simplement une solution plus universelle.

Dustin Davis
la source
4

ELMAH:

  • application Web

Log4net:

  • application Web

  • Application Windows

Références supplémentaires: ref_1 ref_2

sgokhales
la source
1

ELMAH est spécialement utilisé pour les applications Web tandis que log4net est utilisé à la fois sur les applications Web et Windows. ELMAH présente bien plus d'avantages que log4net dans une application Web.

Adeel
la source
5
Quels sont ces avantages? Je ferai bientôt ASP.NET, donc j'aimerais connaître votre opinion éclairée. Je suis toujours débutant dans .NET, il est donc plus difficile pour moi d'interpréter ce qu'ils disent sur leurs sites.
IAdapter
Vous pouvez afficher des rapports même sans écrire de code. Voir les fonctionnalités elmah ici code.google.com/p/elmah
Adeel
Elmah est très limité et le seul "avantage" est les rapports mais il est limité aux applications web qui ont accès à HttpContext. Vous pouvez demander à d'autres enregistreurs de consigner des données vers de nombreuses autres sources sur lesquelles un rapport peut être effectué.
Dustin Davis
0

ELMAH est très puissant, mais aussi très spécifique dans ce qu'il fait. Il fait une grande partie du travail pour vous, alors que je pense que Log4Net vous oblige à gérer les erreurs et à enregistrer.

Dean Thomas
la source