rolling policies pattern loggers examples example configurar java logging log4j log4j2

java - policies - Log4j2 ¿por qué lo usarías sobre log4j?



loggers log4j (2)

Debo estar perdiendo algo, pero he estado observando esto durante unos días, pero ¿por qué demonios usarías log4j2 sobre log4j (aparte del rendimiento)?

Por lo que he visto hasta ahora, log4j2 se anuncia como más fácil de configurar, pero en realidad es mucho más complicado (han pasado tres días y todavía no puedo hacer que escriba un registro en mi directorio de inicio). La configuración automática simplemente no funciona para mí (o al menos no puedo hacer que funcione), el archivo de configuración en sí es sustancialmente más complejo en su estructura y parece ser mucho más difícil agregar cosas en tiempo de ejecución para ayudar a diagnosticar.

Entonces, aparte del rendimiento, ¿hay alguna razón para usar log4j2 sobre log4j original?


Mira this En definitiva, desde el enlace:

Log4j 2.0 introduce:

  • un nuevo sistema de complementos

  • soporte para propiedades

  • Soporte para la configuración basada en JSON y la recarga automática de su configuración.

Compatibilidad con muchos marcos de registro existentes, incluidos SLF4J, Commons Logging, Apache Flume y Log4j 1.x, y proporciona una nueva API para programadores.

Como dijiste, también es mucho más rápido.

Las desventajas son:

  • log4j 2.0 es muy diferente de log4j 1.x, y la API es en su mayoría incompatible.

  • Difícil de configurar.

Si no necesita ninguna de las nuevas funciones, es probable que esté bien con el Log4j 1.x anterior.


Razones para actualizar de Log4j 1.x a Log4j 2

  • Soporte de la comunidad: Log4j 1.x no se mantiene activamente, mientras que Log4j 2 tiene una comunidad activa donde se responden las preguntas, se agregan funciones y se corrigen los errores. Actualización: desde agosto de 2015, Log4j 1.x es oficialmente el fin de la vida útil y se recomienda actualizar a Log4j 2. Actualización 2: Log4j 1.2 no funciona en Java 9 .
  • Async Loggers - Rendimiento similar al registro desactivado
  • Niveles de registro personalizados
  • Recarga automáticamente su configuración tras la modificación sin perder eventos de registro mientras se reconfigura.
  • Compatibilidad con lambda de estilo Java 8 para el registro lento
  • Log4j 2 no tiene garbage-free (o al menos tiene poca basura) desde la versión 2.6
  • Filtering : filtrado basado en datos de contexto, marcadores, expresiones regulares y otros componentes en el evento de registro. Los filtros pueden estar asociados con los madereros. Puede usar una clase de filtro común en cualquiera de estas circunstancias.
  • Arquitectura de plugins : fácil de ampliar mediante la creación de componentes personalizados
  • API admitidas: SLF4J, Commons Logging, Log4j-1.xy java.util.logging
  • Log4j 2 API separada de la implementación de Log4j 2. La API admite más que solo cadenas de registro: secuencias de caracteres, objetos y Messages personalizados. Los mensajes permiten el apoyo para que construcciones interesantes y complejas se pasen a través del sistema de registro y se manipulen de manera eficiente. Los usuarios son libres de crear sus propios tipos de mensajes y escribir diseños personalizados, filtros y búsquedas para manipularlos.
  • Mejoras de concurrencia: log4j2 usa las bibliotecas java.util.concurrent para realizar el bloqueo en el nivel más bajo posible. Log4j-1.x tiene problemas conocidos de interbloqueo.
  • Configuración a través de XML, JSON, YAML, archivos de configuración de propiedades o mediante programación.

Estar atentos

  • Los formatos log4j2.xml y log4j2.properties son diferentes de la sintaxis de configuración de Log4j 1.2
  • Log4j 2 no es fully compatible con Log4j 1.x: Log4j 1.2 API es compatible con el adaptador log4j-1.2-api , pero las personalizaciones que se basan en las características internas de Log4j 1.2 no funcionan.
  • Java 6 requerido para la versión 2.0 a 2.3. Java 7 es necesario para Log4j 2.4 y versiones posteriores.

Consejos al actualizar

Problemas comunes que tiene la gente al comenzar con log4j2:

  • Necesita ( al menos ) tanto log4j-api-2.6.2.jar como log4j-core-2.6.2.jar en su ruta de clase
  • Log4j2 busca un archivo de configuración log4j 2 .xml, no un archivo de configuración log4j.xml
  • location archivo de configuración: póngalo en la ruta de log4j.configurationFile o especifique su ruta con la propiedad del sistema log4j.configurationFile
  • Para depurar la configuración , use <Configuration status="trace"> al principio de su archivo de configuración
  • Recomendaría comenzar con una de las muchas configuraciones de muestra proporcionadas en el manual de log4j2, y luego agregar poco a poco más campanas y silbidos.

Si su problema no es uno de los anteriores, muestre su configuración y proporcione más detalles sobre el problema que está experimentando. (No está seguro de lo que espera de la configuración automática, esta es una función muy básica que registra los eventos de ERROR en la consola si log4j2 no puede encontrar un archivo de configuración. Esto rara vez será suficiente).

Para escribir en su directorio de inicio, puede usar la lookup propiedades del sistema ${sys:PROPERTYNAME} . A continuación se muestra una configuración de ejemplo para demostrar:

<Configuration status="trace"> <Properties> <Property name="logfile">${sys:user.home}/log${date:yyyyMMdd}.log</Property> </Properties> <Appenders> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout pattern="%m%n"/> </Console> <File name="FILE" fileName="${sys:logfile}"> <PatternLayout> <pattern>%d %p [%t] %c{1.} %m%n</pattern> </PatternLayout> </File> </Appenders> <Loggers> <Root level="trace"> <AppenderRef ref="STDOUT" level="ERROR" /> <AppenderRef ref="FILE" /> </Root> </Loggers> </Configuration>