example log4j

example - log4j.properties vs log4j.xml



log4j spring boot (2)

Me pidieron que me moviera de la configuración del estilo de propiedades al estilo xml. El proceso en sí es sencillo y no me está causando ningún problema, simplemente sentí curiosidad por el motivo de que me preguntaran esto y busqué la razón. Encontré esta buena publicación. ¿Por qué eligió XML sobre los archivos de propiedades para la configuración de Log4J? (Más de 3 años, pero aún así es el más informativo que pude encontrar), que apuntaba a este tutorial aún más antiguo . Ellos afirman

Las propiedades pueden definirse por un archivo de propiedades o por un archivo XML.

Log4j busca un archivo llamado log4j.xml y luego un archivo llamado log4j.properties. Ambos deben estar colocados en la carpeta src.

Lo comprobé y, contrariamente a la declaración, descubrí que Log4j busca primero el archivo de propiedades y, por segunda vez, busca xml. De hecho, si mantengo ambas en la misma carpeta, la salida se formatea de acuerdo con el archivo de propiedades. Entonces, ¿soy mal entendido la declaración? ¿Es simplemente incorrecto? La declaración se hizo para log4j 1.2.14 mientras estoy en log4j 1.2.17 , ¿es posible que el equipo de log4j haya cambiado la prioridad? No pude encontrar ninguna documentación relacionada, pero será una inversión de tendencia extraña ya que el xml parecía ser la forma preferida de configurar log4j


Echa un vistazo a la JavaDoc. La documentación de PropertyConfiguratorClass (log4j.properties) señala que

El PropertyConfigurator no maneja las funciones de configuración avanzada admitidas por el DOMConfigurator, como el soporte personalizado de ErrorHandlers, anexos anidados como el AsyncAppender, etc.

Entonces el DOMConfigurator (log4j.xml) ofrece opciones avanzadas.

Además, puede tener (al menos una simple) comprobación de validez de los archivos log4j.xml utilizando el log4j.dtd proporcionado.

Si no hace uso de las funciones avanzadas, no es necesario cambiar de propiedades a archivos xml.

Lo que realmente debería pensar es cambiar de log4j a log4j 2 beta o incluso slf4j . El desarrollo de log4j se ha detenido y su fundador (@Ceki) inventó slf4j.


Según la respuesta de FrVaBe , la clase PropertyConfigurator no maneja las características avanzadas que puede soportar XML.

Vale la pena señalar que una de las opciones avanzadas más útiles (solo log4j.xml disponible) es la capacidad de filtrar en un nivel de registro específico o rango de niveles de registro usando LevelMatchFilter y DenyAllFilter

Un buen ejemplo se puede ver here .