log4net vs. Nlog

355

¿Alguien tiene experiencia para ambos? ¿Cómo se comparan entre sí?

Estamos planeando usar uno de ellos para iniciar sesión en una aplicación empresarial.

Referencias

log4net

nlog

EDITAR: No tenemos dependencias existentes para nlog o log4net.

Greg Dean
fuente
99
Este es el registrador que uso: System.IO.File.AppendAllText (@ "c: \ log.txt", string.Format ("{0} \ r \ n", mensaje));
zumalifeguard
213
Bien por ti, pero algunas personas pueden necesitar la capacidad de activar / desactivar el inicio de sesión dinámicamente, usar diferentes niveles de registro, eliminar automáticamente datos de registro antiguos, etc.
Tor Hovland
23
Cabe señalar que la documentación de Log4Net es terrible.
BentOnCoding
Hay una publicación de blog detallada robertmccarter.com/switching-to-nlog
Michael Freidgeim
2
Deberías probar ReflectInsight. Mucho más poderoso que ambos insightextensions.codeplex.com
code5

Respuestas:

383

Recientemente me encargaron "crear un prototipo de inicio de sesión" para un próximo proyecto. No tenía ninguna experiencia en el marco de registro. Investigué, revisé tutoriales, creé aplicaciones de juguetes, etc. en Log4Net, NLog y Enterprise Library durante unos días. Regresé 3-4 semanas después y los reuní en una demostración coherente. Espero que algo de esto te sea útil.

Mi recomendación para nuestro proyecto es esta:

  1. Utilice una fachada de registro (por ejemplo Common.Logging , SimpleLoggingFacade ) para evitar dependencias directas.
  2. Si terminamos usando Enterprise Library para otras instalaciones, úsela también para iniciar sesión.
  3. Si terminamos usando algo que depende de Log4Net, use Log4Net.
  4. Si ninguno de los anteriores, usa NLog. Lo cual preferiría.

Eso se basa en estos hallazgos (¡opiniones!):

  • Los 3 marcos son capaces y pueden hacer algunas cosas sofisticadas. Queremos una solución de calidad, pero francamente no necesitamos un rendimiento ultra alto o 60 tipos de receptores de eventos.
  • Los 3 tienen conceptos básicos muy similares.
  • Cada uno tiene sus propios trucos geniales, como enrutamiento realmente avanzado, o nombres de archivo de registro dinámico, truncamiento de archivos, etc.
  • Los 3 están bastante bien documentados a su manera.
  • Para un novato completo como yo, todos fueron un poco incómodos inicialmente. No hay diferencias drásticas aquí para lo básico. Lo superé.
  • Al revisar las cosas unas semanas más tarde, NLog fue claramente el más fácil de reanudar. Necesitaba muy poco repasarlo. Con Log4Net, tuve que volver a visitar algunos ejemplos en línea para comenzar. Con EntLib, me di por vencido y volví a hacer los tutoriales desde cero: estaba totalmente perdido.
  • No pude averiguar cómo hacer que EntLib haga algunas cosas como iniciar sesión en la base de datos. Puede ser fácil, pero fue más allá de mi límite de tiempo.
  • Log4Net y NLog tienen una pequeña huella en el código. EntLib es spam, pero de todos modos usaría una fachada sobre él.
  • Accidentalmente configuré mal EntLib y me lo dijo en tiempo de ejecución. Log4Net no lo hizo. No tuve una configuración incorrecta accidental con NLog.
  • EntLib viene con un bonito editor de app.config, que necesitas al 100%. NLog tiene un esquema de archivo de configuración para que obtenga "intellisense". Log4Net viene con nada.

Entonces, obviamente, me gusta NLog hasta ahora. Sin embargo, no es suficiente para usarlo a pesar de tener otra solución disponible.

Mate
fuente
19
+1 en recomendar la construcción de una Fachada para una verdadera separación de preocupaciones (SoC), o para que no contamine su dominio.
eduncan911
66
La fachada solo funciona si puede hacerlo sin romper los valores de diagnóstico que dependen de la pila de llamadas, etc. He visto muchas fachadas que rompen estas características de diagnóstico esenciales que terminaron haciendo más daño que bien ...
James Schek
11
Log4Net aún no admite los perfiles de cliente de .NET 3.5 SP1 y .NET 4, ya que hace referencia a System.Web. Solo quería señalar eso, aunque en realidad está estrechamente relacionado con 'con una dependencia de Log4Net, use Log4Net'.
Simon D.
59
NLog es compatible ( nlog-project.org/download ) mientras que Log4Net no se ha actualizado desde que se publicó la versión 1.2.10 publicada el 19 de abril de 2006 ( issues.apache.org/jira/browse/LOG4NET/fixforversion/11128 )
Jay Cincotta
55
Si tiene una dependencia de una biblioteca que usa log4net y desea usar NLog en su lugar (o viceversa), es bastante sencillo escribir y configurar una clase de Appender personalizada para unir los dos.
dbkk
158

Una consideración clave que no se ha discutido mucho es el soporte y las actualizaciones.

Log4Net no se ha actualizado desde que se publicó la versión 1.2.10 el 19 de abril de 2006 .

Por el contrario, NLog ha sido activamente compatible desde 2006 y pronto lanzará NLog 2.0 que admite muchas plataformas que no existían cuando log4net se actualizó por última vez , como por ejemplo:

  • NET Framework 2.0 SP1 y superior, 3.5 y 4.0 (perfiles de cliente y extendido)
  • Silverlight 2.0, 3.0, 4.0
  • .NET Compact Framework 2.0, 3.5
  • Perfil mono 2.x
Jay Cincotta
fuente
30
¿Pero necesita actualizarse? Si no está roto, ¿no lo arreglas?
glenneroo
24
Se está roto: * Resolución estropea dirección IP entre IPv4 / IPv6 para localhost en Vista y Win7 (varios parches no oficiales están flotando alrededor) * No se compila en .Net 4.0 Client Profile
Tormod Hystad
66
Parece que hay una versión .NET 4.0 en proceso para Log4Net.
scope_creep
38
log4net lanzó v1.2.11 en octubre de 2011 . Creo que esta respuesta es obsoleta ahora.
Mariano Desanze
83
En realidad, esta respuesta todavía era valiosa para mí. Estoy en el proceso de elegir un registrador, y esta respuesta nos dice que log4net se ha actualizado una vez en la última media década, mientras que NLog es un proyecto más activo.
Batibix
97

Habiendo tenido una experiencia con ambos marcos recientemente, pensé que podía compartir mis puntos de vista sobre cada marco.

Me pidieron que evaluara los marcos de registro para una aplicación web existente, reduje mis opciones a NLog (v2.0) y log4net (v1.2.11) después de pasar por varios foros en línea. Aquí están mis hallazgos:

  1. Configurar / iniciar con NLog es muy fácil. Usted sigue el tutorial de Inicio en su sitio web y ya está. Tienes una idea justa, cómo podría ser con nlog. El archivo de configuración es tan intuitivo que cualquiera puede entender la configuración. Por ejemplo: si desea establecer el inicio de sesión interno, establezca el indicador en el nodo del encabezado del archivo de configuración de Nlog, que es donde esperaría que estuviera. En log4net, establece diferentes indicadores en la sección de configuración de aplicaciones de web.config.

  2. En log4net, el registro interno no genera una marca de tiempo que es molesto. En Nlog, obtienes un buen registro con marcas de tiempo. Lo encontré muy útil en mis evaluaciones.

  3. Filtros en log4net: es mejor que revise mi pregunta: filtro log4net: cómo escribir Y filtrar para ignorar los mensajes de registro y, si encuentra una respuesta / solución para esto, hágamelo saber. Entiendo, hay una solución para esta pregunta, ya que puede escribir su propio filtro personalizado. Pero algo que no está fácilmente disponible en log4net.

  4. Rendimiento: registré alrededor de 3000 mensajes de registro en la base de datos utilizando un procedimiento almacenado. Solía ​​simple for loop (int i = 0; i <3000; i ++ ... para registrar el mismo mensaje 3000 veces. Para las escrituras: log4net AdoAppender tomó casi el doble de tiempo que NLog.

  5. Log4net no admite el apéndice asíncrono.

Fue una comparación suficiente para mí elegir NLog como marco de registro. :)

Narayan Akhade
fuente
Registros de depuración interna de log4net
Narayan Akhade
36

Para cualquiera que llegue tarde a este hilo, es posible que desee echar un vistazo a .Net Base Class Library (BCL). Muchas personas se perdieron los cambios entre .Net 1.1 y .Net 2.0 cuando se introdujo la clase TraceSource (circa 2005).

El uso de TraceSource es análogo a otros marcos de registro, con control granular de registro, configuración en app.config / web.config y acceso programático, sin la sobrecarga del bloque de aplicaciones empresariales.

También hay una serie de comparaciones flotando: "log4net vs TraceSource"

Jeremy
fuente
1
EntLib extiende TraceSource
Michael Freidgeim
34

Para nosotros, la diferencia clave está en el rendimiento general ...

Eche un vistazo a Logger.IsDebugEnabledNLog versus Log4Net, a partir de nuestras pruebas, NLog tiene menos sobrecarga y eso es lo que buscamos (cosas de baja latencia).

Saludos, Florian

Florian Doyon
fuente
25

Primero mira el resto de tu stack.

Si está utilizando NHibernate, utiliza Log4Net directamente. Otros marcos pueden tener otros registradores específicos que necesitan.

Aparte de eso: ambos funcionan bien.

Me he decidido por Log4Net yo mismo. Puede ser una tarea difícil de configurar, y si no está configurado correctamente, es difícil descubrir qué salió mal. Pero puede hacer que haga casi cualquier cosa que desee de un registrador.

Si no tiene un problema permanente con Log4Net, aquí hay un artículo que escribí sobre cómo comenzar con él: http://elegantcode.com/2007/12/07/getting-started-with-log4net/

Chris Brandsma
fuente
99
@greg: Tenga en cuenta que en NHibernate v3 la dependencia de log4net se elimina afortunadamente: es conectable para que pueda usar NLog si lo desea.
UpTheCreek
NLog es un dolor igual para configurar / descubrir qué está mal también. Al menos con log4net puede encontrar documentación y / o google para problemas.
Mrchief
Buen punto para tener en cuenta el resto de tu stack, no puedo decir que sea una preocupación que hubiera considerado fuera de mi cabeza. Si bien parece que NHibernate ya no es un ejemplo para este escenario, Sitecore proporciona un ejemplo contemporáneo de esto, ya que utiliza Log4Net internamente. Sitecore es bastante extensible, por lo que puede usar lo que prefiera para iniciar sesión, pero eso es mucho más complejo que editar el sitio web.config para agregar sus propios registradores
Scott Simontis
14

Me hago eco de lo anterior y prefiero nLog. Entlib está innecesariamente hinchado.

Re: Log4net Una cosa que SIEMPRE me deja con log4net es olvidar agregar lo siguiente a global.asax para iniciar el componente:

log4net.Config.XmlConfigurator.Configure();
Francis Shanahan
fuente
13

Si va aquí , puede encontrar una matriz integral que incluye las bibliotecas NLog y Log4Net, así como Enterprise Lib y otros productos.

Alguien podría argumentar que la matriz se realiza de manera de subrayar las características de la única biblioteca comercial presente en la matriz. Creo que es cierto, pero de todos modos fue útil para conducir mi elección versus NLog.

Saludos

Lorenzo
fuente
1
En cuanto a esa matriz, parece considerablemente desactualizado con respecto al menos al marco de The Object Guy, que es un competidor comercial.
Andy Dent
9

Como noté, log4net bloquea sus archivos de salida todo el tiempo que la aplicación se está ejecutando, por lo que no puede eliminarlos. De lo contrario son similares.

Entonces prefiero NLog.

Vitaliy Ulantikov
fuente
22
Agregue <LockModel type = "log4net.Appender.FileAppender + MinimalLock" /> a su configuración de fileappender para evitar esto (mencionado en la página de ejemplos de log4net aquí: logging.apache.org/log4net/release/config-examples.html )
EventHorizon
9

Plug descarado para un proyecto de código abierto que ejecuto, pero dada la animada discusión sobre qué marco de registro de .NET es más activo, pensé que publicaría un enlace obligatorio a Serilog .

Para usar dentro de una aplicación, Serilog es similar a (y se basa en gran medida) en log4net. Sin embargo, a diferencia de otras opciones de registro de .NET, Serilog trata de preservar la estructura de los eventos de registro para el análisis fuera de línea. Cuando escribes:

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

La mayoría de las bibliotecas de registro procesan inmediatamente el mensaje en una cadena. Serilog también puede hacer eso, pero conserva la { Answer: 42 }propiedad para que más adelante, utilizando uno de varios almacenes de datos NoSQL, pueda consultar eventos adecuadamente en función del valor de Answer.

Estamos cerca de un 1.0 y admitimos todas las plataformas modernas (.NET 4.5, Windows Store y Windows Phone 8).

Nicholas Blumhardt
fuente
Pero la pregunta es: ¿es compatible con Mono? ;) Parece prometedor (y me encanta el hilo y el logotipo de la aguja) pero no pude encontrar ninguna información sobre si es compatible con Mono o no.
ashokgelal
Buena pregunta :) ... sí, tenemos usuarios en Mono: no estoy seguro de si están utilizando la compilación .NET 4.5 o 4.0 de Serilog, pero si tiene algún problema, lo ayudaremos.
Nicholas Blumhardt
El soporte de .NET 4.5 me consiguió, descargando y probando su solución ahora mismo
Fat Shogun
8

También secundo NLog porque también funciona con código no administrado. Supongo que podría ser posible usar log4net y log4cxx juntos, pero NLog maneja tanto el código administrado como el no administrado de forma inmediata.

También miré en Common.Logging , una fachada que hace abstracción de la API de registro, es compatible con log4net, NLog y Entreprise Library. No creo que lo use, pero me gusta cómo usan lambdas para mejorar el rendimiento cuando el registro está deshabilitado (una característica compartida con NLog y probablemente otros).

eddycharly
fuente
4

También puede considerar el bloque de registro de la biblioteca de Microsoft Enterprise . Viene con buen diseñador.

Rashack
fuente
3
Le permite configurarlo visualmente en lugar de crear XML a mano. Depende de tu gusto ...
Rashack
13
La idea de usar herramientas visuales para tal cosa no es buena.
Adam Dymitruk el
44
Quizás no sea algo bueno, pero para EntLib es necesario el configurador visual. Escribir la configuración manualmente es prácticamente imposible, es demasiado complicado (ya sabes, es de Microsoft).
Pavel Hodek
1
Incluso si a alguien no le gustaba un diseñador visual, ¡por qué votar en contra! : o
nawfal
EntLib registra sincrónicamente, esencialmente puede afectar el rendimiento.
Michael Freidgeim
2

Creo que el consenso general es que nlog es un poco más fácil de configurar y usar. Sin embargo, ambos son bastante capaces.

tsimon
fuente
0

Según mi experiencia, SmartInspect supera a NLog y log4net.

Es extremadamente fácil de usar, la documentación es excelente, y puede ver y filtrar mensajes registrados previamente con su visor interactivo de registros, lo cual es una gran ventaja para el mundo real.

Una cosa que me gusta son las vistas de datos con pestañas, como las pestañas del navegador en Chrome. Cada pestaña puede proporcionar una vista filtrada diferente del registro.

Aplazamiento de pago
fuente
11
Es un producto pagado. NLog y Log4Net son gratuitos.
Zo tiene