getlogger example configurar java logging log4j slf4j log4j2

java - example - ¿Vale la pena usar slf4j con log4j2?



log4j2 mdc example (1)

Adelante: programa en la API log4j2 en lugar de slf4j

Es seguro: la API Log4j2 ofrece exactamente las mismas garantías que slf4j, y más.

Ahora que Log4j2 está separado en una API y un módulo de implementación, ya no hay ningún valor al usar SLF4J.

Sí, es una buena práctica de ingeniería mantener abiertas sus opciones. Es posible que desee cambiar a otra implementación de registro más adelante.

Durante los últimos 10 años más o menos, construir tal flexibilidad en su aplicación significó usar una API de contenedor como SLF4J. Sin embargo, esta flexibilidad no es gratuita: la desventaja de este enfoque es que su aplicación no puede usar el conjunto de características más rico de la biblioteca de registro subyacente.

Log4j2 ofrece una solución que no requiere que su aplicación esté restringida al mínimo común denominador.

La válvula de escape: log4j-to-slf4j

Log4j2 incluye un módulo puente log4j-to-slf4j . Cualquier aplicación codificada con la API Log4j2 puede elegir cambiar la implementación de respaldo a cualquier implementación compatible con slf4j en cualquier momento.

Como se mencionó en la pregunta, el uso de la API Log4j2 ofrece directamente más funcionalidad y tiene algunas ventajas no funcionales en comparación con el uso de una API de envoltura como slf4j:

  • API de mensajes
  • Lambdas para la tala perezosa
  • Registre cualquier objeto en lugar de solo cadenas
  • Libre de basura: evite crear varargs o cadenas cuando sea posible
  • CloseableThreadContext elimina automáticamente elementos del MDC cuando haya terminado con ellos

(Consulte 10 características de API Log4j2 no disponibles en SLF4J para obtener más detalles).

Las aplicaciones pueden usar de forma segura estas funciones completas de la API Log4j2 sin estar bloqueadas en la implementación central nativa de Log4j2.

SLF4J sigue siendo su válvula de seguridad, simplemente no significa que su aplicación deba codificar contra la API SLF4J.

Divulgación: contribuyo a Log4j2.

Actualización: Parece haber cierta confusión de que la programación de la API Log4j2 de alguna manera introduce una "fachada para una fachada". No hay diferencia a este respecto entre la API Log4j2 y SLF4J.

Ambas API requieren 2 dependencias cuando se usa una implementación nativa y 4 dependencias para una implementación no nativa. SLF4J y la API Log4j2 son idénticos a este respecto. Por ejemplo:

No puedo decidir si usar slf4j o no con log4j2. Según las publicaciones en línea, no parece que tenga ningún impacto en el rendimiento, pero es realmente necesario.

También estos puntos gobiernan a favor de log4j2:

  • SLF4J obliga a su aplicación a registrar cadenas. La API Log4j 2 admite el registro de cualquier CharSequence si desea registrar texto, pero también admite el registro de cualquier Objeto tal cual.
  • La API Log4j 2 ofrece soporte para registrar objetos Message, expresiones lambda de Java 8 y un registro libre de basura (evita crear matrices vararg y evita crear cadenas al registrar objetos CharSequence).