web-dev-qa-db-fra.com

log4net contre nlog

Quelqu'un a de l'expérience pour les deux? Comment s'empilent-ils les uns contre les autres?

Nous prévoyons d’utiliser l’un d’eux pour la connexion à une application d’entreprise.

Références:

log4net

nlog

EDIT: Nous n'avons aucune dépendance existante à nlog ou log4net.

356
Greg Dean

J'ai récemment été chargé de "créer un prototype pour un projet à venir." Je n'avais aucune expérience de cadre de journalisation. J'ai effectué des recherches, parcouru des tutoriels, créé des applications pour jouets, etc. sur Log4Net, NLog et Enterprise Library pendant quelques jours. Nous sommes revenus 3 ou 4 semaines plus tard et les avons réunis dans une démonstration cohérente. Espérons que cela vous soit utile.

Ma recommandation pour notre projet est la suivante:

  1. Utilisez une façade de journalisation (par exemple, Common.Logging , SimpleLoggingFacade ) pour éviter les dépendances directes.
  2. Si nous finissons par utiliser l'Enterprise Library pour d'autres installations, nous l'utilisons également pour la journalisation.
  3. Si nous finissons par utiliser quelque chose qui dépend de Log4Net, utilisez Log4Net.
  4. Si rien de ce qui précède, utilisez NLog. Ce que je préférerais.

C'est basé sur ces résultats (opinions!):

  • Les 3 frameworks sont capables et peuvent faire des choses sophistiquées. Nous voulons une solution de qualité, mais franchement, nous n’avons pas besoin d’ultra hautes performances ni de 60 types de puits d’événement.
  • Tous les 3 ont des concepts de base très similaires.
  • Chacune a ses propres astuces, comme un routage vraiment avancé, des noms de fichiers de journaux dynamiques, une troncation de fichier, etc.
  • Tous les 3 sont bien documentés à leur manière.
  • Pour un newb complet comme moi, ils étaient tous un peu maladroits au début. Pas de différences drastiques ici pour les bases. Je m'en suis remis.
  • Quelques semaines plus tard, NLog était clairement clairement le plus facile à reprendre. J'avais besoin de très peu de mise au point. Avec Log4Net, j'ai dû revoir quelques exemples en ligne pour commencer. Avec EntLib, j'ai abandonné et refait les tutoriels à partir de zéro - j'étais totalement perdu.
  • Je ne savais pas comment faire en sorte qu'EntLib effectue certaines tâches, telles que se connecter à la base de données. Cela pourrait être facile, mais c'était au-delà de mon temps.
  • Log4Net et NLog ont une faible empreinte dans le code. EntLib est un spam, mais j'utiliserais quand même une façade par dessus.
  • J'ai accidentellement mal configuré EntLib et il me l'a dit au moment de l'exécution. Log4Net non. Je n'ai pas eu de mauvaise configuration accidentelle avec NLog.
  • EntLib est livré avec un bel éditeur app.config, dont vous avez besoin à 100%. NLog a un schéma de fichier de configuration afin que vous obteniez "intellisense". Log4Net est livré avec nada.

Alors évidemment, j'aime bien le NLog jusqu'à présent. Pas assez pour l'utiliser malgré le fait d'avoir une autre solution disponible, cependant.

383
Matt

Le support et les mises à jour sont une considération clé qui n'a pas été beaucoup discutée.

Log4Net n'a pas été mis à jour depuis la publication de la version 1.2.10 le 19 avril 2006 .

En revanche, NLog a été activement pris en charge depuis 2006 publiera bientôt NLog 2.0 supportant de nombreuses plateformes qui n’existaient pas à la dernière mise à jour de log4net tels que:

  • NET Framework 2.0 SP1 et versions ultérieures, 3.5 et 4.0 (profils client et étendu)
  • Silverlight 2.0, 3.0, 4.0
  • .NET Compact Framework 2.0, 3.5
  • Mono 2.x profil
159
Jay Cincotta

Ayant récemment eu une expérience avec les deux frameworks, j'ai pensé pouvoir partager mon point de vue sur chaque framework.

On m'a demandé d'évaluer les infrastructures de journalisation pour une application Web existante. J'ai limité mes choix à NLog (v2.0) et log4net (v1.2.11) après avoir consulté divers forums en ligne. Voici mes conclusions:

  1. Configurer/démarrer avec NLog est extrêmement simple. Vous parcourez le didacticiel de mise en route sur leur site Web et vous avez terminé. Vous avez une idée juste, comment ça pourrait être avec nlog. Le fichier de configuration est tellement intuitif que tout le monde peut comprendre la configuration. Par exemple: si vous souhaitez définir la connexion interne, vous définissez l'indicateur dans le nœud d'en-tête du fichier de configuration Nlog, où vous vous attendez. Dans log4net, vous définissez différents indicateurs dans la section appSettings de web.config.

  2. Dans log4net, la journalisation interne ne génère pas d'horodatage gênant. Dans Nlog, vous obtenez un journal de Nice avec des horodatages. Je l'ai trouvé très utile dans mes évaluations.

  3. Filtres dans log4net - Vous devriez vérifier ma question - filtre log4net - comment écrire et filtrer pour ignorer les messages de journalisation et si vous trouvez une réponse/solution à ce problème, merci de me le faire savoir. Je comprends, il existe une solution de contournement pour cette question, car vous pouvez écrire votre propre filtre personnalisé. Mais quelque chose qui n’est pas facilement disponible dans log4net.

  4. Performance - J'ai enregistré environ 3000 messages de journal dans la base de données à l'aide d'une procédure stockée. J'ai utilisé simple for loop (int i = 0; i <3000; i ++ ... pour consigner le même message 3000 fois. Pour les écritures: log4net AdoAppender prenait presque le double de temps par rapport à NLog.

  5. Log4net ne prend pas en charge l'appender asynchrone.

Pour moi, la comparaison était suffisante pour choisir NLog comme cadre de journalisation. :)

97
Narayan Akhade

Pour ceux qui arrivent sur ce fil en retard, vous voudrez peut-être jeter un coup d'œil sur la bibliothèque de classes de base .Net (BCL) .Net. De nombreuses personnes ont manqué les modifications apportées entre .Net 1.1 et .Net 2.0 lors de l’introduction de la classe TraceSource (vers 2005).

L'utilisation de TraceSource est analogue à celle d'autres infrastructures de journalisation, avec un contrôle granulaire de la journalisation, une configuration dans app.config/web.config et un accès par programme, sans la surcharge du bloc d'applications d'entreprise.

Il existe également un certain nombre de comparaisons qui circulent: "log4net vs TraceSource"

36
Jeremy

Pour nous, la différence principale réside dans la performance globale ...

Examinez Logger.IsDebugEnabled dans NLog par rapport à Log4Net. D'après nos tests, NLog génère moins de temps système et c'est ce que nous recherchons (à faible temps de latence).

A bientôt, Florian

34
Florian Doyon

Commencez par regarder le reste de votre pile.

Si vous utilisez NHibernate, il utilise directement Log4Net. D'autres cadres peuvent avoir d'autres enregistreurs spécifiques dont ils ont besoin.

Autre que cela: les deux fonctionnent bien.

J'ai moi-même opté pour Log4Net. Cela peut être difficile à configurer, et s’il n’est pas configuré correctement, il est également difficile de comprendre ce qui ne va pas. Mais vous pouvez lui faire faire presque tout ce que vous voulez d'un enregistreur.

Si vous n’avez pas de problème permanent avec Log4Net, voici un article que j’ai écrit sur la façon de le démarrer: http://elegantcode.com/2007/12/07/getting-started-with- log4net /

25
Chris Brandsma

Bien .. J'ai utilisé la bibliothèque d'entreprise pour les tâches de journalisation de la base de données et maintenant je suis passé à NLog en raison d'un goulot d'étranglement des performances.

quelques informations de comparaison:

http://pauliusraila.blogspot.com/2010/10/solving-database-logging-bottlenecks.html

17
Joe

Je fais écho à ce qui précède et préfère nLog. Entlib est inutilement gonflé.

Re: Log4net Une chose qui me touche toujours avec log4net est d’oublier d’ajouter ce qui suit au fichier global.asax pour initier le composant:

log4net.Config.XmlConfigurator.Configure();
15
Francis Shanahan

Si vous y allez ici , vous trouverez une matrice complète comprenant à la fois les bibliothèques NLog et Log4Net, ainsi que Enterprise Lib et d’autres produits.

Quelqu'un pourrait dire que la matrice est conçue de manière à souligner les caractéristiques de la seule bibliothèque commerciale présente dans la matrice. Je pense que c’est vrai, mais c’était quand même utile de conduire mon choix contre NLog.

Cordialement

13
Lorenzo

Comme je l'ai remarqué, log4net verrouille ses fichiers de sortie pendant le fonctionnement de l'application, vous ne pouvez donc pas les supprimer. Sinon, ils sont similaires.

Donc je préfère le NLog.

9
Vitaliy Ulantikov

Prise sans vergogne pour un projet open source que je lance, mais compte tenu de la discussion animée sur le fait que le framework de journalisation .NET soit plus actif, j'ai pensé envoyer un lien obligatoire vers Serilog .

Pour l’utiliser dans une application, Serilog est similaire à (et s’appuie beaucoup sur) log4net. Contrairement aux autres options de journalisation .NET, cependant, Serilog consiste à préserver la structure des événements de journalisation pour une analyse hors ligne. Quand tu écris:

Log.Information("The answer is {Answer}", 42);

La plupart des bibliothèques de journalisation rendent immédiatement le message en une chaîne. Serilog peut le faire aussi, mais il conserve la propriété { Answer: 42 } afin que, ultérieurement, en utilisant l'un des nombreux magasins de données NoSQL, vous puissiez interroger correctement les événements en fonction de la valeur de Answer.

Nous approchons d'une version 1.0 et prenons en charge toutes les plateformes modernes (.NET 4.5, Windows Store et Windows Phone 8).

9

J'appuie également NLog car cela fonctionne également avec du code non géré. Je suppose qu’il serait possible d’utiliser log4net et log4cxx ensemble, mais NLog gère les codes à la fois gérés et non gérés.

J'ai aussi examiné Common.Logging , une façade qui fait abstraction de l'api de journalisation, elle prend en charge log4net, NLog et Entreprise Library. Je ne pense pas que je l'utiliserai, mais j'aime bien la façon dont ils utilisent lambdas pour améliorer les performances lorsque la journalisation est désactivée (une fonctionnalité partagée avec NLog et probablement d'autres).

8
eddycharly

Vous pouvez également envisager Bloc de journalisation de la bibliothèque Microsoft Enterprise . Il vient avec Nice designer.

4
Rashack

Je pense que le consensus général est que nlog est un peu plus facile à configurer et à utiliser. Les deux sont tout à fait capables, cependant.

2
tsimon

D'après mon expérience, SmartInspect bat NLog et log4net.

Il est extrêmement facile à utiliser, la documentation est excellente et vous pouvez afficher et filtrer les messages précédemment enregistrés avec leur visionneuse de journaux interactive, ce qui constitue un avantage considérable dans le monde réel. .

Une des choses que j'aime bien, ce sont les vues à onglets des données, comme les onglets du navigateur dans Chrome. Chaque onglet peut fournir une vue filtrée différente du journal.

0
Contango