2009-09-03 11 views
9

¿Cómo se compara el JDK Logger con Apache log4j?Comparar log4j y Logger

¿Cuál es mejor para los proyectos nuevos que apuntan a Java 6? ¿Cómo se comparan en términos de flexibilidad y configurabilidad?

+1

Casi todo es mejor que 'java.util.logging', incluso si esto implica la introducción de una dependencia de terceros. – skaffman

Respuesta

11

En mi opinión, lo único que el registrador JDK tiene a su favor es que es parte del JDK, por lo que no agrega una dependencia externa. Si la elección es solo entre esos dos, yo elegiría Log4j. Todavía tiene un mejor soporte en términos de appenders, el número de personas que lo conocen (en mis observaciones anecdóticas) y una mejor API (que también es subjetiva).

Al iniciar un proyecto hoy en día, lo más tentador es ir con slf4j y diferir la decisión: siempre puede enchufar un marco diferente debajo de slf4j simplemente cambiando el classpath.

Dicho esto, hay otras opciones (como Log5j) que aprovechan las últimas características del lenguaje Java. Recomiendo echar un vistazo largo Logback (de uno de los programadores principales de Log4j, como es slf4j).

+1

Después de revisar Logback, creo que lo usaré para nuevos proyectos sin dependencias de biblioteca en log4j, y log4j de lo contrario. – notnoop

4

Nunca he usado el registrador JDK directo, pero para un nuevo proyecto recomendaría encarecidamente Logback, diseñado como un sucesor para log4j. Algunas de las cosas buenas que puede hacer con él: Edificio del estilo de parámetros

  • printf, concatenando cadenas no más desordenado protegidos por guardias si logger.isDebugEnabled().

van desde

if (log.isDebugEnabled()) 
{ 
    log.warn (i + "many ints,"+ l+"many longs"); 
} 

a

log.debug("{} many ints, {} many longs", i, l); 
  • configuración muy flexible, incluidas las configuraciones que se imprimirán las huellas. La configuración es xml, pero su sitio incluye una utilidad que generará una configuración xml a partir de su configuración log4j para que pueda comenzar.

Desventaja: muchos paquetes requieren log4j de todos modos, ya que es muy común, por lo que su proyecto puede necesitar incluir 2 paquetes de registro.

+1

¡La dependencia existente de log4j me hace sentir tentada de atenerme a este tipo de proyectos! – notnoop

3

Para un nuevo proyecto, recomendaría encarecidamente el proyecto slf4j, que proporciona frontend genérico para varios marcos de registro.

La {} -sintaxis descrita por Steve B también está presente en slf4j (mismo autor), por lo que obtienes todos los beneficios independientemente del servidor y TODAVÍA obtiene la independencia del back-end. También está disponible un puente log4j, por lo que el código existente puede usar slf4j de forma transparente. Es muy agradable.

Para el backend real, el logback es agradable, pero es posible que ya haya invertido en log4j; esto es fácilmente aprovechable.

1

Recomendaría el JDK logging API. Lo he usado por muchos años, sin ningún problema en absoluto. Es parte del JDK, por lo que no se requiere un frasco adicional. Las distinciones entre log4j y JDK son pequeñas y, en mi opinión, no justifican el uso de log4j.

1

API estándar vs log4j

Una pregunta común hecha por los desarrolladores de Java es:

Por qué debemos usar marco de registro log4j cuando Java proporciona una API para el registro. La API de Java se puede acceder por (java.util.logging)?

Log4j tiene las siguientes ventajas sobre las API de registro estándar:

  • log4j proporciona un registro robusto
  • log4j tiene más características disponibles de API de registro estándar
  • configuración y el uso log4j es más fácil
  • log4j también tiene un sistema de formateo mucho más robusto
  • muchos programas y controladores adicionales están disponibles para log4j
+0

Esta pregunta común es exactamente lo que estoy considerando (y por qué estoy aquí), pero esta respuesta me confunde más. En esta respuesta, ¿qué significa exactamente 'robusto', por qué es log4j más robusto? Cuando se trata de "más características", ¿hay alguna información destacada? Nuevamente con la robustez, ¿qué es un sistema de formateo robusto? Admitiré que soy "nuevo" para iniciar sesión en Java, pero estas implementaciones parecen terriblemente exageradas para la mayoría de las aplicaciones pequeñas y medianas. – ThePerson

0

Luché con esta pregunta varias veces; con jdk7 y jdk8; Java Logging es súper rápido y resbaladizo, pero lo único que tenemos que poner al programador es la configuración.

Para iniciar sesión en múltiples destinos de archivos, necesitamos crear clases de signare que extiendan FielHandler y usarlos en el archivo de propiedades para configurar, este tipo de complejidades parece consumir mucho tiempo, pero una vez que se cuelga, la eficiencia y la confiabilidad son impresionantes.