Migration auf log4j2
Die Klasse YFCLogCategory, die in erster Linie für die Protokollierung durch den Sterling™ Order Management System-Code verwendet wird und auch vom Kundencode genutzt wird, erweitert org.apache.log4j.Category nicht, das eine log4j 1.x ist. Ihr angepasster Code ist von diesem Release betroffen, wenn Sie Methoden verwenden, die nicht von der Klasse YFCLogCategory definiert werden. Methoden, die nicht von der Klasse YFCLogCategory definiert und in der übergeordneten Klasse org.apache.log4j.Category verfügbar sind, werden nicht unterstützt.
YFCLogCategory hinzugefügt, um sicherzustellen, dass keine Laufzeitfehler des angepassten Codes auftreten. Hierbei handelt es sich jedoch um Pseudomethoden, die in einem späteren Release entfernt werden können.public void log(Object level, Object obj)public void setLevel(Object level)public boolean isEnabledFor(Object level)
Die Methode YFCLogCategory.getLogger() wird nicht unterstützt. Verwenden Sie stattdessen die Methode YFCLogCategory.instance(Class.class) .
private static YFCLogCategory logger = YFCLogCategory.instance(MyClassName.class);- Wenn Sie die
YFCLogCategory-Instanz inorg.apache.log4j.Categoryoderorg.apache.log4j.Loggerumsetzen, wird dies nicht unterstützt. Die Umsetzung einer Instanz vonYFCLogCategoryinorg.apache.log4j.Loggeroderorg.apache.log4j.Categorywird nicht kompiliert, wenn neuer Code geschrieben wird. Bei vorhandenem angepassten Code, der diese Umsetzungen enthält, trifft der angepasste Code zur Laufzeit aufClassCastException. Beispielsweise werden die Zeilen #2 und #3 aus dem folgenden Codemuster nicht unterstützt.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 - Wenn Sie
log(Level level, Object)aufrufen, ersetzen Sie es durch bestimmte Methoden wie error (Object) oder debug (Object) , die von der KlasseYFCLogCategorybereitgestellt werden. - Wenn Sie
setLevel(Level level)aufrufen, müssen Sie es löschen. Sie können die Ebenen von Protokollfunktionen in log4j2 nicht ändern, da dies in der log4j2 -API nicht unterstützt wird. Die weitere Verwaltung der Protokollebenen erfolgt durch den Code, und Sie müssen Traces für bestimmte Teile des Codes erstellen, für die Sie eine erweiterte Protokollierung wünschen. - Wenn Sie
isEnabledFor(Level level)aufrufen, ersetzen Sie es durch spezifische Methoden wie isInfoEnabled oder isTimerEnabled.
Sterling Order Management System entfernt die JAR-Datei log4j 1.2.17 aus Sicherheitsgründen aus der mitgelieferten JAR-Datei und Sie müssen daher alle direkten Aufrufe an org.apache.log4j.* -Klassen entfernen. Wenn Sie die Aufrufe oder Importe von org.apache.log4j.* -Klassen nicht entfernen können, müssen Sie die JAR-Datei log4j 1.2.17 in Ihr Anpassungspaket aufnehmen, indem Sie sie von der offiziellen Website von Apache herunterladen.
- Entfernen Sie
org.apache.log4j.Loggerund verwenden SieYFCLogCategory. - Entfernen Sie
org.apache.log4j.Levelund verwenden Sie bestimmte Methoden inYFCLogCategory.
IBM empfiehlt, keine Klassen Apache log4j (v2 oder v1) direkt zu verwenden. Sie können YFCLogCategoryverwenden, um zu verhindern, dass Änderungen in der zugrunde liegenden Protokollierungs-API in Sterling Order Management Systemverfügbar gemacht werden.
Wenn Sie Bibliotheken von Fremdanbietern haben, die Abhängigkeiten von log4j 1.x -JAR-Dateien haben, suchen Sie nach solchen JAR-Dateien, indem Sie den folgenden Befehl für den extrahierten Inhalt der JAR-Datei des Fremdanbieters ausführen, die Sie im Anpassungspaket packen.
jar -xvf <third-party jar>
grep -rnw 'org.apache.log4j'Dieser Befehl gibt Klassen aus, die von der JAR-Datei log4j 1.x abhängig sind. Wenn Sie Ergebnisse finden, müssen Sie überprüfen, ob eine aktualisierte Version dieser JAR-Datei verfügbar ist.
Einige protokollierungsbezogene Bibliotheken anderer Anbieter wie slf4j oder commons-logging weisen möglicherweise die JAR-Abhängigkeit log4j 1.x auf, aber Sie können diese Bibliotheken ignorieren.