Log4j 1.2 - 2.17.2 - puente y configuración heredada
Las recientes vulnerabilidades zero-day de log4j2 han causado bastante revuelo en el mundo Java. Sin duda, las empresas de software empezaron a prestar más atención a las dependencias que usan en sus productos. Actualmente, podemos disfrutar de dos versiones seguras de log4j: 2.17.1 y 2.17.2. Sin embargo, algunos productos heredados aún utilizan la versión 1.2 de log4j, que llegó a su EOL en 2015. Además, algunos ni siquiera usan la fachada slf4j.
Durante el proceso de parcheo de seguridad, puedes optar por reemplazar la 1.2 con la librería reload4j, que contiene las mismas clases pero corregidas para fallos críticos. No obstante, el enfoque más recomendable es migrar completamente a log4j2. Una tercera opción es un punto intermedio: usar el puente log4j-1.2-api, que expone la API antigua conectando con el núcleo de la versión 2.

Además de la API, log4j2 introdujo soporte para la configuración antigua desde la versión 2.13.3. Hay que tener cuidado, ya que no todos los elementos de configuración están completamente soportados, especialmente si se combinan con appenders personalizados como apache-log4j-extras (que, por cierto, contiene un subconjunto de clases de la 1.2, lo que hace su uso algo cuestionable).
Nota: Se esperan mejoras interesantes en la 2.18 para soportar más elementos de configuración de apache-extras, como el org.apache.log4j.
rolling.RollingFileAppender .
Teniendo esto en cuenta, puedes actualizar la configuración o intentar reutilizar la antigua si está completamente soportada. Un detalle importante son las mejoras implementadas en 2.17.2 respecto a la 2.17.1. Antes, la forma programática de cargar la configuración a través del puente no hacía nada. La 2.17.2, además de numerosas correcciones, también cambia este comportamiento.
Si aún tienes código que carga la configuración usando la API 1.2, por ejemplo:
DOMConfigurator.configure(filename);
DOMConfigurator.configureAndWatch(configFilename, delay);
puedes encontrarte con errores inesperados. Como se menciona en la documentación de migración, esto no está permitido, pero hasta la 2.17.1 no tenía efectos negativos. En la 2.17.2, intentará cargar la configuración 1.x, lo que puede afectar tu estrategia de migración si usas esta interfaz:
public class DOMConfigurator {
//2.17.1:
public static void configureAndWatch(final String configFilename, final long delay) {
}
//2.17.2:
public static void configureAndWatch(final String fileName, final long delay) {
XMLWatchdog xdog = new XMLWatchdog(fileName);
xdog.setDelay(delay);
xdog.start();
}
//...
}
En cuanto a las propiedades del sistema, la propiedad log4j.configurationFile
conocida de log4j2 es la fuente preferida de configuración al usar el puente. Puedes usar la propiedad heredada 1.x log4j.configuration
al mismo tiempo y así migrar suavemente al nuevo formato.