log4net vs. Nlog


355

Qualcuno ha esperienza per entrambi? Come si sovrappongono?

Stiamo programmando di utilizzarne uno per accedere a un'applicazione enterprise.

Riferimenti:

log4net

nlog

EDIT: Non abbiamo dipendenze esistenti per nlog o log4net.


9
Questo è il logger che uso: System.IO.File.AppendAllText (@ "c: \ log.txt", string.Format ("{0} \ r \ n", message));
zumalifeguard,

213
Buono per te, ma alcune persone potrebbero aver bisogno della possibilità di attivare / disattivare la registrazione dinamicamente, di utilizzare diversi livelli di registro, di eliminare automaticamente i vecchi dati di registro, ecc.
Tor Hovland

23
Va notato che la documentazione di Log4Net è terribile.
BentOnCoding

C'è un post dettagliato sul blog robertmccarter.com/switching-to-nlog
Michael Freidgeim,

2
Dovresti provare ReflectInsight. Molto più potente di entrambi insightextensions.codeplex.com
code5

Risposte:


383

Recentemente mi è stato assegnato il compito di "prototipare un po 'di login" per un progetto imminente. Non ho avuto alcuna esperienza di framework di registrazione. Per alcuni giorni ho svolto ricerche, eseguito tutorial, realizzato app giocattolo ecc. Su Log4Net, NLog ed Enterprise Library. Sono tornato 3-4 settimane dopo e li hanno riuniti in una demo coerente. Spero che una parte di questo ti sia utile.

La mia raccomandazione per il nostro progetto è questa:

  1. Utilizzare una facciata di registrazione (ad esempio Common.Logging , SimpleLoggingFacade ) per evitare dipendenze dirette.
  2. Se finiamo per utilizzare Enterprise Library per altre strutture, utilizzarlo anche per la registrazione.
  3. Se finiamo per usare qualcosa con una dipendenza da Log4Net, usa Log4Net.
  4. Se nessuno dei precedenti, usa NLog. Quale preferirei.

È basato su questi risultati (opinioni!):

  • Tutti e 3 i framework sono capaci e possono fare cose sofisticate. Vogliamo una soluzione di qualità, ma francamente non abbiamo bisogno di prestazioni ultra elevate o 60 tipi di lavelli per eventi.
  • Tutti e 3 hanno concetti di base molto simili.
  • Ognuno ha i suoi trucchi interessanti, come routing davvero avanzato, o nomi di file di registro dinamici, troncamento dei file, ecc.
  • Tutti e 3 sono abbastanza ben documentati a modo loro.
  • Per un principiante completo come me, inizialmente erano tutti un po 'imbarazzanti. Nessuna differenza drastica qui per le basi. L'ho superato.
  • Quando rivisitavo le cose poche settimane dopo, NLog era chiaramente il più facile da riprendere. Avevo bisogno di pochissimo ripassarlo. Con Log4Net, ho dovuto rivisitare alcuni esempi online per iniziare. Con EntLib mi sono arreso e ho ricominciato da capo i tutorial da zero: ero totalmente perso.
  • Non riuscivo a capire come fare in modo che EntLib facesse alcune cose come accedere al database. Potrebbe essere facile, ma era oltre il mio limite di tempo.
  • Log4Net e NLog hanno un footprint nel codice ridotto. EntLib è spam, ma comunque userei una facciata su di esso.
  • Ho erroneamente configurato EntLib e mi ha detto in fase di esecuzione. Log4Net no. Non ho avuto una configurazione errata accidentale con NLog.
  • EntLib viene fornito con un editor app.config dall'aspetto gradevole, di cui hai bisogno al 100%. NLog ha uno schema di file di configurazione in modo da ottenere "intellisense". Log4Net viene fornito con nada.

Quindi ovviamente mi piace NLog finora. Tuttavia, non abbastanza per usarlo nonostante abbia a disposizione un'altra soluzione.


19
+1 su come raccomandare di costruire una facciata per una vera separazione delle preoccupazioni (SoC), o almeno così non inquini il tuo dominio.
eduncan911,

66
La facciata funziona solo se puoi farlo senza rompere i valori diagnostici che dipendono dallo stack di chiamate, ecc. Ho visto molte facciate che rompono queste caratteristiche diagnostiche essenziali che hanno finito per fare più male che bene ...
James Schek,

11
Log4Net non supporta ancora i profili client di .NET 3.5 SP1 e .NET 4, poiché fa riferimento a System.Web. Volevo solo evidenziarlo, anche se in realtà è strettamente correlato a "con una dipendenza da Log4Net, utilizzare Log4Net".
Simon D.

59
NLog è attivamente supportato ( nlog-project.org/download ) mentre Log4Net non è stato aggiornato da quando la versione 1.2.10 è stata pubblicata il 19 aprile 2006 ( issues.apache.org/jira/browse/LOG4NET/fixforversion/11128 )
Jay Cincotta,

5
Se hai una dipendenza da una libreria che utilizza log4net e vuoi invece usare NLog (o viceversa), è abbastanza semplice scrivere e configurare una classe Appender personalizzata per colmare i due.
dbkk,

158

Una considerazione chiave che non è stata molto discussa è il supporto e gli aggiornamenti.

Log4Net non è stato aggiornato dalla versione 1.2.10 è stata pubblicata il 19 aprile 2006 .

Al contrario, NLog è stato attivamente supportato dal 2006 rilascerà presto NLog 2.0 che supporta molte piattaforme che non esistevano all'ultimo aggiornamento di log4net come:

  • NET Framework 2.0 SP1 e versioni successive, 3.5 e 4.0 (profili client ed estesi)
  • Silverlight 2.0, 3.0, 4.0
  • .NET Compact Framework 2.0, 3.5
  • Profilo mono 2.x

30
Ma deve essere aggiornato? Se non è rotto, non aggiustarlo?
glenneroo,

24
Si è rotto: risoluzione * scombina indirizzo IP tra IPv4 / IPv6 per localhost su Vista e Win7 (diverse patch non ufficiali sono galleggianti intorno) * Non compilare in .Net 4.0 Client Profile
Tormod Hystad

6
Sembra che ci sia una versione .NET 4.0 nelle opere per Log4Net.
scope_creep

38
log4net è stato lanciato v1.2.11 a ottobre 2011 . Penso che questa risposta sia ormai obsoleta.
Mariano Desanze,

83
In realtà, questa risposta è stata ancora preziosa per me. Sono in procinto di scegliere un logger e questa risposta ci dice che log4net è stato aggiornato una volta nell'ultima metà del decennio, mentre NLog è un progetto più attivo.
Batibix,

97

Avendo avuto un'esperienza con entrambi i framework di recente, ho pensato di poter condividere le mie opinioni su ciascun framework.

Mi è stato chiesto di valutare i framework di registrazione per un'applicazione Web esistente, ho ristretto le mie scelte a NLog (v2.0) e log4net (v1.2.11) dopo aver attraversato vari forum online. Ecco i miei risultati:

  1. Impostare / avviare con NLog è semplicissimo. Passa attraverso l'esercitazione introduttiva sul loro sito Web e hai finito. Hai una buona idea di come potrebbero essere le cose con nlog. Il file di configurazione è così intuitivo che chiunque può capire la configurazione. Ad esempio: se si desidera impostare l'accesso interno, impostare il flag nel nodo di intestazione del file di configurazione Nlog, che è dove ci si aspetterebbe che sia. In log4net, si impostano flag diversi nella sezione Impostazioni app di web.config.

  2. In log4net, la registrazione interna non genera un timestamp che è fastidioso. In Nlog, ottieni un bel registro con i timestamp. L'ho trovato molto utile nelle mie valutazioni.

  3. Filtri in log4net - Faresti meglio a controllare questa mia domanda - filtro log4net - come scrivere e filtrare per ignorare i messaggi di registro e se trovi una risposta / soluzione per questo, per favore fatemelo sapere. Capisco, c'è una soluzione per questa domanda, in quanto puoi scrivere il tuo filtro personalizzato. Ma qualcosa che non è facilmente disponibile in log4net.

  4. Prestazioni: ho registrato circa 3000 messaggi di log nel database usando una procedura memorizzata. Ho usato semplice per il ciclo (int i = 0; i <3000; i ++ ... per registrare lo stesso messaggio 3000 volte. Per la scrittura: log4net AdoAppender ha impiegato quasi il doppio del tempo rispetto a NLog.

  5. Log4net non supporta l'appender asincrono.

Per me è stato un confronto sufficiente scegliere NLog come framework di registrazione. :)


di log4net i registri interni di debug: logging.apache.org/log4net/release/sdk/...
Narayan Akhade

36

Per chiunque arrivi a questo thread in ritardo, potresti voler dare un'occhiata alla .Net Base Class Library (BCL). Molte persone hanno perso i cambiamenti tra .Net 1.1 e .Net 2.0 quando è stata introdotta la classe TraceSource (circa 2005).

L'uso di TraceSource è analogo ad altri framework di registrazione, con controllo granulare della registrazione, configurazione in app.config / web.config e accesso programmatico - senza l'overhead del blocco dell'applicazione aziendale.

Esistono inoltre numerosi confronti in giro: "log4net vs TraceSource"


1
EntLib estende TraceSource
Michael Freidgeim il

34

Per noi, la differenza chiave sta nella perf generale ...

Logger.IsDebugEnabledDai un'occhiata a NLog contro Log4Net, dai nostri test, NLog ha meno costi generali ed è quello che stiamo cercando (cose a bassa latenza).

Saluti, Florian


25

Dai un'occhiata al resto del tuo stack.

Se si utilizza NHibernate, utilizza direttamente Log4Net. Altri framework potrebbero avere altri logger specifici di cui hanno bisogno.

Diverso da quello: entrambi funzionano bene.

Ho optato per Log4Net me stesso. Configurare può essere una seccatura, e se non è configurato correttamente è una seccatura capire cosa è andato storto. Ma puoi farlo fare quasi tutto ciò che vorresti da un logger.

Se non hai problemi permanenti con Log4Net, ecco un articolo che ho scritto su come iniziare: http://elegantcode.com/2007/12/07/getting-started-with-log4net/


9
@greg: Nota che in NHibernate v3 la dipendenza da log4net è stata rimossa per fortuna - è collegabile in modo da poter usare NLog se lo si desidera.
UpTheCreek

NLog è ugualmente doloroso per configurare / capire anche cosa non va. Almeno con log4net è possibile trovare documentazione e / o google per problemi.
Mrchief,

Un buon punto per prendere in considerazione il resto del tuo stack, non posso dire che sia una preoccupazione che avrei considerato fuori dalla mia testa. Mentre sembra che NHibernate non sia più un esempio per questo scenario, Sitecore ne fornisce un esempio contemporaneo, poiché utilizza Log4Net internamente. Sitecore è piuttosto estensibile, quindi puoi usare tutto ciò che preferisci registrare, ma è molto più complesso della modifica del web.config del sito per aggiungere i tuoi logger
Scott Simontis


14

Mi associo a quanto sopra e preferisco nLog. Entlib è inutilmente gonfio.

Ri: Log4net Una cosa che SEMPRE mi ottiene con log4net è dimenticare di aggiungere quanto segue a global.asax per avviare il componente:

log4net.Config.XmlConfigurator.Configure();

13

Se vai qui puoi trovare una matrice completa che include sia le librerie NLog e Log4Net sia Enterprise Lib e altri prodotti.

Qualcuno potrebbe obiettare che la matrice è fatta in modo da sottolineare le caratteristiche dell'unica lib commerciale presente nella matrice. Penso che sia vero, ma è stato comunque utile guidare la mia scelta contro NLog.

Saluti


1
Guardando quella matrice sembra notevolmente obsoleto rispetto almeno al framework di The Object Guy, che è un concorrente commerciale.
Andy Dent,

9

Come ho notato, log4net blocca i loro file di output per tutto il tempo in cui l'applicazione è in esecuzione, quindi non è possibile eliminarli. Altrimenti sono simili.

Quindi preferisco NLog.


22
Aggiungere <tipo lockingModel = "log4net.Appender.FileAppender + MinimalLock" /> al tuo config fileappender per impedire questo (citato nella pagina esempi log4net qui: logging.apache.org/log4net/release/config-examples.html )
EventHorizon

9

Eseguo una spina spudorata per un progetto open source, ma data la vivace discussione su quale framework di logging .NET sia più attivo, ho pensato di pubblicare un link obbligatorio a Serilog .

Per utilizzare all'interno di un'applicazione, Serilog è simile a (e attinge molto) log4net. A differenza di altre opzioni di registrazione .NET, tuttavia, Serilog riguarda la conservazione della struttura degli eventi di registro per l'analisi offline. Quando scrivi:

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

La maggior parte delle librerie di log rende immediatamente il messaggio in una stringa. Anche Serilog può farlo, ma conserva la { Answer: 42 }proprietà in modo che in seguito, utilizzando uno dei numerosi archivi di dati NoSQL, sia possibile eseguire correttamente la query degli eventi in base al valore di Answer.

Siamo vicini alla 1.0 e supportiamo tutte le piattaforme moderne (.NET 4.5, Windows Store e Windows Phone 8).


Ma la domanda è: supporta Mono? ;) Sembra promettente (e adoro il filo e il logo dell'ago) ma non sono riuscito a trovare alcuna informazione sul fatto che supporti Mono o meno.
ashokgelal,

Bella domanda :) ... sì, abbiamo utenti su Mono - Non sono sicuro che stiano usando la versione .NET 4.5 o 4.0 di Serilog, ma se si verificano problemi, ci daremo una mano.
Nicholas Blumhardt,

Mi è stato fornito il supporto di .NET 4.5, scaricando e provando subito la tua soluzione
Fat Shogun,

8

Anch'io secondo NLog perché funziona anche con codice non gestito. Suppongo che potrebbe essere possibile utilizzare log4net e log4cxx insieme, ma NLog gestisce sia il codice gestito che quello non gestito.

Ho anche guardato Common.Logging , una facciata che rende l'astrazione dell'API di registrazione, supporta log4net, NLog e Entreprise Library. Non credo che lo userò, ma mi piace il modo in cui usano lambda per migliorare le prestazioni quando la registrazione è disabilitata (una funzione condivisa con NLog e probabilmente altri).


4

Potresti anche prendere in considerazione il Blocco registrazione librerie di Microsoft Enterprise . Viene fornito con un bel designer.


3
Ti consente di configurarlo visivamente invece di creare XML manualmente. Dipende dai tuoi gusti ...
Rashack

13
L'idea di utilizzare strumenti visivi per una cosa del genere non è una buona cosa.
Adam Dymitruk,

4
Forse non è una buona cosa, ma per il configuratore visivo EntLib è necessario. Scrivere manualmente la configurazione è praticamente impossibile, è troppo complicato (sai, è di Microsoft).
Pavel Hodek,

1
Anche se a qualcuno non piaceva un visual designer, perché ridimensionare! : o
nawfal,

EntLib esegue la registrazione in modo sincrono, può essenzialmente influire sulle prestazioni.
Michael Freidgeim,

2

Penso che il consenso generale sia che nlog sia un po 'più facile da configurare e utilizzare. Entrambi sono abbastanza capaci, però.


0

Sulla base della mia esperienza, SmartInspect batte sia NLog che log4net.

È estremamente facile da usare, la documentazione è fantastica e puoi visualizzare e filtrare i messaggi precedentemente registrati con il loro visualizzatore di log interattivo, il che è un enorme vantaggio del mondo reale.

Una cosa che mi piace è la visualizzazione a schede dei dati, come le schede del browser in Chrome. Ogni scheda può fornire una diversa visualizzazione filtrata del registro.


11
È un prodotto a pagamento. NLog e Log4Net sono gratuiti.
Zo ha il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.