log4net vs. Nlog
Quelqu'un a de l'expérience pour les deux? Comment ils se comparent les uns contre les autres?
nous prévoyons d'utiliser l'un d'eux pour la connexion dans une application d'entreprise.
, les Références:
éditer: nous n'avons aucune dépendance existante à nlog ou log4net.
15 réponses
j'ai récemment été chargé de "prototype certains loggin'" pour un projet à venir. Je n'ai pas de journalisation de l'expérience. J'ai fait des recherches, j'ai parcouru des tutoriels, j'ai créé des applications jouets, etc. sur Log4Net, NLog et Enterprise Library pendant quelques jours. Je suis revenu 3-4 semaines plus tard et je les ai réunis dans une démo cohésive. J'espère que certains de cela est utile pour vous.
ma recommandation pour notre projet est la suivante:
- façade (par exemple commune.Logging , SimpleLoggingFacade ) pour éviter les dépendances directes.
- si nous finissons par utiliser la bibliothèque D'entreprise pour d'autres installations, puis l'utiliser pour la journalisation, aussi.
- si nous finissons par utiliser quelque chose avec une dépendance sur Log4Net, utilisez Log4Net.
- si aucun des éléments ci-dessus, utiliser NLog. Ce que je préférerais.
C'est basé sur ces résultats (avis!):
- tous les 3 bâtis sont capables et peuvent faire des choses sophistiquées. Nous voulons une solution de qualité, mais franchement nous n'avons pas besoin d'ultra haute performance ou 60 types de lavabos.
- tous les 3 ont des concepts de base très similaires.
- chacun a ses propres trucs cools, comme le routage vraiment avancé, ou les noms de fichiers de log dynamiques, la troncature de fichiers, etc.
- tous les 3 sont assez bien documentés dans leur propre façon.
- pour un newb complet comme moi, ils étaient tous un peu bizarres au début. Pas de différences drastiques ici pour les bases. Je l'ai eu sur elle.
- en revisitant les choses quelques semaines plus tard, NLog était clairement le plus facile à reprendre. J'ai besoin de très peu de brosse sur elle. Avec Log4Net, j'ai dû revoir quelques exemples en ligne pour commencer. Avec EntLib, j'ai abandonné et j'ai fait les tutoriels à nouveau à partir de zéro - j'étais totalement perdu.
- Je n'arrivais pas à trouver comment faire pour que EntLib fasse des choses comme se connecter à la base de données. Il pourrait être facile, mais c'était au-delà de ma limite de temps.
- Log4Net et NLog ont une faible empreinte codée. EntLib est moche, mais j'utiliserais une façade dessus de toute façon.
- J'ai accidentellement mal configuré EntLib et il m'a dit à l'exécution. Log4Net ne l'a pas fait. Je n'ai pas fait de config accidentel avec NLog.
- EntLib livré avec une belle application.rédacteur de configuration, dont vous avez besoin à 100%. NLog a un schéma de fichier de configuration donc vous obtenez "intellisense". Log4Net est livré avec nada.
il est donc évident que j'aime NLog jusqu'à présent. Pas assez pour l'utiliser en dépit d'avoir une autre solution disponible.
un point clé qui n'a pas été beaucoup discuté est le soutien et les mises à jour.
Log4Net n'a pas été mis à jour depuis la publication de la version 1.2.10 avril 19, 2006 .
en revanche, NLog a été activement soutenu depuis 2006 sortira bientôt NLog 2.0 soutenant de nombreuses plates-formes qui n'existaient pas lorsque log4net a été mis à jour la dernière fois tels que:
- NET Framework 2.0 SP1 et supérieur, 3.5 et 4.0 (Client et des profils Étendus)
- Silverlight 2.0, 3.0, 4.0
- .NET Compact Framework 2.0, 3.5
- Mono 2.x profil
ayant eu une expérience avec les deux cadres récemment, j'ai pensé que je peux partager mes vues sur chaque cadre.
on m'a demandé d'évaluer les cadres de journalisation pour une application Web existante, j'ai limité mes choix à NLog (v2.0) et log4net (v1.2.11) après avoir parcouru divers forums en ligne. Voici mes conclusions:
-
configurer/démarrer avec NLog est très facile. Vous passez par le tutoriel d'initiation sur leur site web et vous avez terminé. Vous avez une bonne idée, comment ça pourrait être avec nlog. Le fichier de configuration est si intuitif que n'importe qui peut comprendre la configuration. Par exemple: si vous voulez configurer la journalisation interne, vous définissez le drapeau dans le noeud d'en-tête du fichier de configuration Nlog, qui est là où vous vous attendez à ce qu'il soit. Dans log4net, vous mettez différents drapeaux dans le web.la section Applications de config.
-
dans log4net, la journalisation interne ne produit pas d'horodatage qui est ennuyeux. Dans Nlog,vous obtenez un bon log avec des horodateurs. Je l'ai trouvé très utile dans mes évaluations.
-
Filtres dans log4net - Vous mieux de vérifier mon cette question - log4net filtre - comment écrire ET le filtre à ignorer les messages du journal et si vous trouvez une réponse/solution pour ce faire, s'il vous plaît laissez-moi savoir. Je comprends, il y a une solution pour cette question, vous pouvez écrire vos propres filtres personnalisés. Mais quelque chose qui n'est pas facilement disponible dans log4net.
-
Performance-j'ai enregistré environ 3000 messages log dans la base de données en utilisant une procédure stockée. J'ai utilisé de la simple boucle for (int i=0; i & lt; 3000; i++... pour enregistrer le même message 3000 fois. Pour les Écritures: log4net AdoAppender a pris presque le double du temps que NLog.
-
Log4net ne supporte pas asynchrone appender.
il était suffisant comparaison pour moi de choisir NLog comme cadre de journalisation. :)
pour ceux qui arrivent à ce fil en retard, vous pouvez jeter un oeil en arrière à la bibliothèque de classe .Net Base (BCL). Beaucoup de gens ont manqué les changements entre .Net 1.1 et .net 2.0 lorsque la classe TraceSource a été introduite (circa 2005).
utilisant TraceSource est similaire à d'autres cadres de journalisation, avec contrôle granulaire de la journalisation, configuration en app.config / web.config, et l'accès programmatique-sans les frais généraux de la l'entreprise de bloc d'application.
Il ya aussi un certain nombre de comparaisons flottant autour de: "log4net vs TraceSource "
pour nous, la différence principale est dans le perf global...
regardez Logger.IsDebugEnabled
dans NLog versus Log4Net, d'après nos tests, NLog a moins de frais généraux et c'est ce que nous recherchons (faible latence).
santé, Florian
regardez D'abord le reste de votre pile.
si vous utilisez NHibernate, il utilise Log4Net directement. D'autres cadres peuvent avoir d'autres enregistreurs dont ils ont besoin.
autre que cela: les deux fonctionnent bien.
J'ai moi-même installé Log4Net. Il peut être difficile à configurer, et s'il n'est pas configuré correctement, il est difficile de comprendre ce qui a mal tourné. Mais on peut faire presque tout ce que vous voulez à partir 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 commencer avec lui: http://elegantcode.com/2007/12/07/getting-started-with-log4net/
bien .. J'ai utilisé la bibliothèque D'entreprise pour des tâches de journalisation de base de données et maintenant je suis passé à NLog en raison du goulot d'étranglement de la performance.
à titre de comparaison info :
http://pauliusraila.blogspot.com/2010/10/solving-database-logging-bottlenecks.html
je reprends le dessus et ne préfèrent nLog. Entlib est inutilement gonflé.
Re: Log4net une chose qui me dérange toujours avec log4net est d'oublier d'ajouter ce qui suit au global.asax pour initialiser le composant:
log4net.Config.XmlConfigurator.Configure();
Si vous allez ici , vous pouvez trouver une matrice globale qui inclut à la fois la NLog et Log4Net libs ainsi que de l'Entreprise Lib et d'autres produits.
Quelqu'un pourrait soutenir que la matrice est faite d'une manière à souligner les caractéristiques de la seule lib commerciale présente dans la matrice. Je pense que c'est vrai mais c'était utile de conduire mon choix contre NLog.
concerne
comme je l'ai remarqué, log4net verrouille leurs fichiers de sortie que l'application est en cours d'exécution, de sorte que vous ne pouvez pas les supprimer. Sinon, ils sont semblables.
donc je préfère NLog.
fiche éhontée pour un projet open source que j'ai lancé, mais étant donné la discussion animée à propos de laquelle .NET logging framework est plus active, j'ai pensé que je mettrais un lien obligatoire vers Serilog .
à utiliser dans une application, Serilog est similaire à log4net (et s'en inspire fortement). Contrairement à D'autres options de journalisation.net, Serilog vise à préserver la structure des événements log pour une analyse hors ligne. Quand vous écrivez:
Log.Information("The answer is {Answer}", 42);
la plupart des bibliothèques de journalisation rendent immédiatement le message dans une chaîne. Serilog peut le faire aussi, mais il préserve la propriété { Answer: 42 }
de sorte que plus tard, en utilisant l'un des magasins de données NoSQL, vous puissiez interroger correctement les événements basés sur la valeur de Answer
.
nous sommes proches d'un 1.0 et supportons toutes les plates-formes modernes (.NET 4.5, Windows Store et Windows Phone 8).
je seconde NLog trop car il fonctionne avec du code non managé. Je suppose qu'il pourrait être possible d'utiliser log4net et log4cxx ensemble, mais NLog gère à la fois le code géré et non géré.
j'ai aussi regardé commun.Logging , une façade qui fait abstraction de l'api de logging, il prend en charge log4net, NLog et la bibliothèque Entreprise. Je ne pense pas que je vais l'utiliser, mais j'aime comment ils utilisent lambdas pour améliorer la performance quand l'exploitation forestière est désactivé (une fonctionnalité partagée avec NLog et probablement d'autres).
vous pourriez aussi considérer Microsoft Enterprise Library Logging Block . Il est livré avec un beau designer.
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.
basé sur mon expérience, SmartInspect bat à la fois NLog et log4net.
son extrêmement facile à utiliser, la documentation est grande, et vous pouvez voir et filtrer les messages préalablement connectés avec leur visionneuse de log interactive, qui est un énorme avantage du monde réel.
une chose que j'aime est les vues tabulées des données, comme les onglets de navigateur dans Chrome. Chaque onglet peut fournir une autre vue filtrée du journal.