example configurar java log4j slf4j

java - configurar - ¿Log4j está siendo abandonado a favor de Slf4j?



log4j2 levels (6)

Primero: un punto importante: Slf4j es el registro frontend (la API), que puede usarse debajo de la mayoría de los principales sistemas de registro: log4j o java.util.logging, por ejemplo. Por lo tanto, es mejor comparar sfl4j con commons-logging .

Acerca del estado de Log4j, citas de El estado de la registración de java (hace un año)

Una cosa de la que no me había dado cuenta es que el desarrollo log4j está esencialmente muerto. Actualmente se encuentra en la versión 1.2, y los planes para la versión 1.3 fueron abandonados a favor del desarrollo de log4j 2.0. Sin embargo, no parece que 2.0 esté en desarrollo activo. Vale la pena señalar que Ceki Gülcü, el fundador original del proyecto log4j, ha pasado a slf4j (ver a continuación).

Parece que log4j tiene algunos problemas de carga de clases (entre otros) y me parece que la tendencia es salir de log4j hacia slf4j. (Hibernate dejó de usar el primero a favor de este último)

  1. ¿Es verdad?
  2. ¿Cuáles son los principales problemas en log4j que resuelve slf4j?
  3. ¿Es slf4j la última palabra o existe incluso una mejor norma de la industria "el próximo próximo log4j"?

Actualizar:

  • Entonces, esta answer de delfuego me confunde, ¿puedes aceptarla / rechazarla ?:

Pareces haber tropezado con el principal problema con log4j (y la biblioteca de Apache Commons Logging), es decir, que tienen un tiempo ridículamente difícil para descubrir e interactuar con los cargadores de clases correctos a medida que se utilizan. Hay una explicación muy densa, completa con ejemplos, aquí; El mensaje final es que una de las principales fuerzas motrices para el nuevo marco de trabajo SLF4J fue eliminar estos problemas por completo. Es posible que desee cambiarlo y ver si su vida se hace más fácil.


SLF4J tiene, en mi opinión, la gran ventaja de que puede unificar el registro de todas las bibliotecas que utiliza a través de los puentes que proporciona. Ninguno de los otros marcos de registro lo permite. Esto permite que los proyectos se muevan sin problemas a SLF4J e ignoren las opciones de marco de registro que las dependencias han creado.


Si miramos la página slf4j , no parece que reemplazará a log4j, sino que le permitiría usar el mismo marco de trabajo de registro subyacente (por ejemplo, log4j) para toda la aplicación, lo que permite que las bibliotecas se conecten automáticamente.

Parece más un reemplazo para commons-logging que log4j.


Slf4J no es una alternativa para Log4j, sino que proporciona una Fachada para el registro, por lo que uno puede conectar su propio marco de trabajo. Es principalmente útil para las bibliotecas. de slf4j.org:

Simple Logging Facade para Java o (SLF4J) sirve como una simple fachada o abstracción para varios marcos de registro, por ejemplo, java.util.logging, log4j y logback, lo que permite al usuario final conectar el marco de trabajo de registro deseado en el momento del despliegue.

Para responder a su pregunta: Slf4j está siendo adoptado por frameworks ahora, pero en sus proyectos, puede seguir usando Log4J (o cualquier otro)


Slf4j es de hecho solo una fachada de explotación maderera. Sin embargo, Log4j está destinado a ser sucedido por Logback , de los mismos autores.

Actualización : si desea saber acerca de otro beneficio de Slf4j, es el hecho de que las siguientes construcciones (feos) ya no son necesarias para evitar que se llame innecesariamente a toString() :

if (logger.isDebugEnabled()) { logger.debug("Message: " + bigObject + ", " + anotherBigObject); }

En su lugar, puede hacer uso de mensajes parametrizados:

logger.debug("Message: {}, {}", bigObject, anotherBigObject);

También vea ¿Cuál es la forma más rápida de (no) registro?


Slf4j no es una verdadera fachada de registro. Slf4j no admite muchas características de sus implementadores. Para abreviar, menciono los ejemplos de log4j a continuación.

  • Slf4j no puede especificar un archivo de configuración seleccionado por el usuario, pero obliga al usuario a usar el valor predeterminado (log4j.properties o log4j.xml) en una de las tantas raíces Java (cada Jar tiene una raíz más raíz JVM y clases o bin). Si dos archivos JAR lo tienen, es difícil controlar cuál usar de forma segura.
  • Slf4j no puede admitir todos los niveles de Log4j, como ''fatal''. Cuando se cambia el código grande de Log4j a Slf4j, se necesita un gran esfuerzo de cambio de código (por ejemplo, decidir cómo reorganizar los niveles).
  • Se deben elegir dos archivos Jar clave (log4j-over-slf4j.jar o slf4j-log4j12.jar). Si classpath ambos, no funcionará. Si elige uno al azar, pierda características inesperadas (por ejemplo, log4j-over-slf4j.jar no admite varios archivos de registro para las mismas clases, por ejemplo, uno para el registro de eventos y otro para el registro de datos sin formato).