Migration vers log4j2
La classe YFCLogCategory qui est principalement utilisée pour la journalisation par le code Sterling™ Order Management System et également utilisée par le code client n'étend pas org.apache.log4j.Category, qui est une classe log4j 1.x Votre code personnalisé est impacté par cette édition si vous utilisez des méthodes qui ne sont pas définies par la classe YFCLogCategory . Les méthodes qui ne sont pas définies par la classe YFCLogCategory et qui sont disponibles à partir de la classe parent org.apache.log4j.Category ne sont pas prises en charge.
YFCLogCategory pour s'assurer qu'aucun échec d'exécution du code personnalisé ne se produit. Toutefois, il s'agit de méthodes factices qui peuvent être supprimées dans une édition ultérieure.public void log(Object level, Object obj)public void setLevel(Object level)public boolean isEnabledFor(Object level)
La méthode YFCLogCategory.getLogger() n'est pas prise en charge. Utilisez la méthode YFCLogCategory.instance(Class.class) à la place.
private static YFCLogCategory logger = YFCLogCategory.instance(MyClassName.class);- Si vous transtyper l'instance
YFCLogCategoryversorg.apache.log4j.Categoryouorg.apache.log4j.Logger, elle n'est pas prise en charge. Le transtypage d'une instance deYFCLogCategoryenorg.apache.log4j.Loggerouorg.apache.log4j.Categoryne se compile pas lors de l'écriture d'un nouveau code. Pour le code personnalisé existant qui comporte ces transtypages, le code personnalisé rencontreClassCastExceptionlors de l'exécution. Par exemple, les lignes #2 et #3 du modèle de code suivant ne sont pas prises en charge.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 vous appelez
log(Level level, Object), remplacez-le par des méthodes spécifiques telles que error (Object) ou debug (Object) qui sont fournies par la classeYFCLogCategory. - Si vous appelez
setLevel(Level level), vous devez le supprimer. Vous ne pouvez pas modifier les niveaux de consignateurs dans log4j2 car il n'est pas pris en charge dans l'API log4j2 . Une gestion plus poussée des niveaux de journalisation est effectuée par le code et vous devez créer des traces pour des parties spécifiques du code pour lesquelles vous souhaitez une journalisation étendue. - Si vous appelez
isEnabledFor(Level level), remplacez-le par des méthodes spécifiques telles que isInfoEnabled ou isTimerEnabled.
Sterling Order Management System supprime le fichier JAR log4j 1.2.17 de son fichier JAR fourni pour des raisons de sécurité. Vous devez donc supprimer tous les appels directs aux classes org.apache.log4j.* . Si vous ne parvenez pas à supprimer les appels ou les importations des classes org.apache.log4j.* , vous devez inclure le fichier JAR log4j 1.2.17 dans votre package de personnalisation en le téléchargeant à partir du site officiel Apache .
- Supprimez
org.apache.log4j.Loggeret utilisezYFCLogCategory. - Supprimez
org.apache.log4j.Levelet utilisez des méthodes spécifiques dansYFCLogCategory.
IBM recommande de ne pas utiliser directement les classes Apache log4j (v2 ou v1). Vous pouvez utiliser YFCLogCategory, qui vous empêche d'être exposé aux modifications apportées à l'API de journalisation sous-jacente dans Sterling Order Management System.
Si vous disposez de bibliothèques tierces qui ont des dépendances sur des fichiers JAR log4j 1.x , recherchez ces fichiers JAR en exécutant la commande suivante sur le contenu extrait du fichier JAR tiers que vous conditionnez dans le package de personnalisation.
jar -xvf <third-party jar>
grep -rnw 'org.apache.log4j'Cette commande imprime les classes qui dépendent du fichier Jar log4j 1.x . Si vous trouvez des résultats, vous devez vérifier si une version mise à jour de ce fichier Jar est disponible.
Certaines bibliothèques tierces liées à la journalisation, telles que slf4j ou commons-logging, peuvent avoir la dépendance log4j 1.x Jar, mais vous pouvez ignorer ces bibliothèques.