Pregunta

¿Por qué se podría usar uno de los siguientes paquetes en lugar de la otra?

  • Java Inicio de sesión
  • Commons Logging
  • Log4j
  • SLF4J
  • Logback
¿Fue útil?

Solución

En orden cronológico de apariencia API (por lo que yo sé):

  • Log4J porque casi todo el mundo lo usa (en mi experiencia)
  • Commons registro porque los proyectos de código abierto que utilizan (para que puedan integrarse con cualquier marco de registro se utiliza en la solución integrada); especialmente válido si estás una API / Marco / OSS y que dependen de otros paquetes que usan los Comunes registro.
  • Registro Commons, ya que no desea "bloquear" a un marco de registro en particular (lo que en lugar de bloquear a lo Commons registro le da su lugar) - Creo que no es sensato optar con este punto como la razón.
  • registro de Java, ya que no desea agregar en un frasco adicional.
  • SLF4J porque es más nuevo que los Comunes Registro y proporciona un registro con parámetros:

logger.debug("The entry is {}.", entry);
//which expands effectively to
if (logger.isDebugEnabled()){
    // Note that it's actually *more* efficient than this - see Huxi's comment below...
    logger.debug("The entry is " + entry + "."); 
}
  • Logback porque es más nuevo que log4j y otra vez, admite el registro de parámetros, ya que implementa directamente SLF4J
  • SLF4J / Logback porque está escrito por el mismo tipo que hizo log4j, por lo que ha hecho mejor (según la Ken G -. parece gracias a encajar cuando se mira en su anteriores mensajes de noticias )
  • SLF4J porque también publicar un adaptador de log4j por lo que no tiene que "cambiar hacia fuera" log4j en código antiguo - sólo hacen log4j.properties utilizan SLF4J y es de configuración

Otros consejos

Me parece registrar en Java a ser confuso, incoherente, pobremente documentada, y sobre todo al azar. Por otra parte, hay una enorme cantidad de similitud entre estos marcos madereras que resulta en la duplicación de esfuerzos y confusión en cuanto a qué entorno registro esté en. En particular, si se está trabajando en una pila de aplicaciones web en Java graves, que son a menudo en múltiple entornos de registro de una sola vez; (Por ejemplo hibernación puede utilizar log4j, y Tomcat java.util.logging). Apache Commons está destinado a tender un puente sobre diferentes marcos de registro, pero en realidad sólo añade más complejidad. Si usted no sabe esto antes de tiempo, es totalmente desconcertante. ¿Por qué mis mensajes de registro no se imprimen en la consola, etc.? Ohh porque estoy buscando en los registros de Tomcat, y no log4j. Añadiendo otra capa de complejidad, el servidor de aplicaciones puede tener configuraciones de registro globales que pueden no reconocer configuraciones locales para una aplicación web en particular. Por último, todos estos marcos madereras son demasiado complicado. Inicio de sesión en Java ha sido un caos desorganizado dejando a los desarrolladores como yo frustrado y confundido.

Las primeras versiones de Java no tenían incorporado un marco de registro que lleva a este escenario.

Hay un punto importante que no se mencionó antes:

SLF4J (y ambos Logback y LOG4J como el servidor de registro) tienen apoyo para un contexto de diagnóstico así llamada asignada (MDC, ver y href="http://logback.qos.ch/manual/mdc.html" rel="nofollow noreferrer"> documentación ).

Este es esencialmente un local de subprocesos Map que se puede utilizar para agregar información de contexto adicional a su registro de eventos. El estado actual de la MDC se adjunta a cada evento.

Esto puede ser muy útil si se pone cosas como el nombre de usuario y la dirección URL de la solicitud (en el caso de una aplicación web) en ella. Esto puede hacerse automáticamente utilizando un filtro, por ejemplo.

Véanse también las respuestas a la pregunta ¿Cuáles son las mejores prácticas registrar un error , especialmente:?

  • Hay un cierto potencial problemas de carga de clase con los Comunes Tala.

  • Log4J y SLF4J fueron desarrollados por     la misma persona, aprendiendo de     problemas encontrados en la práctica con Log4J.

En nuestro proyecto de empresa que utilizamos LOG4J y es muy fácil de usar como Esteban mostró en su ejemplo. También hemos escrito nuestras propias clases de patrones para LOG4J para que pueda crear sus propios esquemas de archivo de salida. Puede describir cómo su archivo de registro debe ser similar. Es posible mejorar las clases de log4j originales.

Todas las propiedades log4j que se pueden cambiar en un archivo log4j.properties, por lo que se pueden utilizar diferentes archivos para diferentes proyectos.

registro de Java no es mi favorito, pero esto podría ser porque uso log4j desde el principio.

El Commons Logging visión general da la razón de su existencia: el registro del código de la biblioteca, cuando no tienen control sobre el marco de registro subyacente. Muy importante para los diversos proyectos de Apache, que se vincularán en aplicaciones externas. Tal vez no es tan importante para los proyectos de TI internos, donde se tiene un control completo.

Dicho esto, escribo para Commons registro, al igual que muchos de los otros desarrolladores que conozco. La razón es reducir al mínimo equipaje mental: se puede cambiar proyectos o trabajos, y no tener que aprender un nuevo marco (siempre que el nuevo puesto de trabajo / proyecto también utiliza CL, y / o se puede convencer a moverse a la misma)

Además, hay algo de valor a la creación de sus propias envolturas alrededor de cualquier marco que se utiliza. Como se describe aquí , me gusta usar un objeto LogWrapper para proporcionar personalizada stringification (importante), y minimizar el desorden visual de los estados de registro (menos importante).

En general, me gustaría utilizará por defecto Log4J.

Me gustaría utilizar Java Logging si no me importa una dependencia de Java 1.4, pero me gustaría seguir utilizando Log4J de preferencia.

Me gustaría utilizar Commons Logging si yo estaba mejorando algo que ya se usó.

Yo sugeriría la creación de un registro de fachada delgado que puede escribir en cualquiera de los marcos de registro, en cuyo punto la elección del motor respaldo de convertirse en más o menos un punto discutible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top