Migración a log4j2


Con la versión 22.1 minor update 1, IBM Sterling® Order Management System utiliza log4j2 para el registro y no envía el archivo log4j v1.2.17.jar.

La clase YFCLogCategory que se utiliza principalmente para el registro por el código Sterling™ Order Management System y también utilizado por el código de cliente no extiende org.apache.log4j.Category, que es una clase log4j 1.x. El código personalizado se ve afectado con este release si está utilizando métodos que no están definidos por la clase YFCLogCategory . Los métodos que no están definidos por la clase YFCLogCategory y están disponibles en la clase padre org.apache.log4j.Category no están soportados.

Después de aplicar el release 22.1 actualización menor 1 , puede consultar los métodos en el Javadoc principal actualizado. Los métodos siguientes se añaden a la clase YFCLogCategory para asegurarse de que no se producen anomalías de tiempo de ejecución del código personalizado. Sin embargo, estos son métodos ficticios y pueden eliminarse en un release posterior.
  • public void log(Object level, Object obj)
  • public void setLevel(Object level)
  • public boolean isEnabledFor(Object level)
Cambios de código personalizado
IMPORTANTE:

El método YFCLogCategory.getLogger() no está soportado. En su lugar, utilice el método YFCLogCategory.instance(Class.class) .

Por ejemplo:
private static YFCLogCategory logger = YFCLogCategory.instance(MyClassName.class);
Compruebe el código personalizado y realice los cambios siguientes:
  • Si está haciendo la conversión de la instancia de YFCLogCategory a org.apache.log4j.Category o org.apache.log4j.Logger, no está soportada. La conversión de una instancia de YFCLogCategory a org.apache.log4j.Logger o org.apache.log4j.Category no se compila al escribir código nuevo. Para el código personalizado existente que tiene estas conversiones, el código personalizado encuentra ClassCastException en tiempo de ejecución. Por ejemplo, la línea #2 y #3 del siguiente patrón de código no están soportados.
    YFCLogCategory LOGGER = YFCLogCategory.instance(MyClass.class.getName());
    org.apache.log4j.Logger apLogger=(org.apache.log4j.Logger)LOGGER;          // Not supported
    org.apache.log4j.Category apCategory=(org.apache.log4j.Category)LOGGER;    // Not supported
  • Si está llamando a log(Level level, Object), sustitúyalo por métodos específicos como error (Object) o debug (Object) proporcionados por la clase YFCLogCategory .
  • Si está llamando a setLevel(Level level), debe suprimirlo. No puede cambiar los niveles de los registradores en log4j2 porque no está soportado en la API log4j2 . El código realiza una gestión adicional de los niveles de registro y debe crear rastreos para partes específicas del código para las que desea un registro ampliado.
  • Si llama a isEnabledFor(Level level), sustitúyalo por métodos específicos como isInfoEnabled o isTimerEnabled.

Descontinuación de los frascos de log4j-1.x

Los log4j-1.x archivos jar no son compatibles con el sistema IBM Sterling Order Management como parte del paquete de personalización del cliente.

Descontinuación de los archivos JAR puente de log4j1 a log4j2

Los frascos puente de « log4j1 » a « log4j2 » no son compatibles. Por ejemplo, no se admite añadir log4j-1.2-api-2.17.1.jar a un paquete de personalización.

Bibliotecas de terceros

Debe actualizar su código personalizado o actualizar cualquier archivo jar de terceros que aún dependa de log4j-1.x. Log4j-1.x está obsoleto y ya no es compatible con Apache. Si tienes bibliotecas de terceros que aún requieren log4j 1.x, es probable que se trate de bibliotecas obsoletas. Debe migrar a la última versión de estas bibliotecas de terceros o buscar alternativas más seguras si las bibliotecas se actualizan para utilizar log4j2.