Migration auf log4j2


Mit der Version 22.1 minor update 1 verwendet IBM Sterling® Order Management System log4j2 für die Protokollierung und liefert die Datei log4j v1.2.17.jar nicht aus.

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.

Nachdem Sie das Release 22.1 Minor Update 1 angewendet haben, können Sie sich die Methoden in der aktualisierten zentralen Javadoc ansehen. Die folgenden Methoden werden der Klasse 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)
Änderungen des angepassten Codes
WICHTIG:

Die Methode YFCLogCategory.getLogger() wird nicht unterstützt. Verwenden Sie stattdessen die Methode YFCLogCategory.instance(Class.class) .

Beispiel:
private static YFCLogCategory logger = YFCLogCategory.instance(MyClassName.class);
Überprüfen Sie Ihren angepassten Code und nehmen Sie die folgenden Änderungen vor:
  • Wenn Sie die YFCLogCategory -Instanz in org.apache.log4j.Category oder org.apache.log4j.Loggerumsetzen, wird dies nicht unterstützt. Die Umsetzung einer Instanz von YFCLogCategory in org.apache.log4j.Logger oder org.apache.log4j.Category wird nicht kompiliert, wenn neuer Code geschrieben wird. Bei vorhandenem angepassten Code, der diese Umsetzungen enthält, trifft der angepasste Code zur Laufzeit auf ClassCastException . 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 Klasse YFCLogCategory bereitgestellt 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.
log4j-1.2.17.jarentfernen

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.

Nehmen Sie die folgenden Codeänderungen vor:
  • Entfernen Sie org.apache.log4j.Logger und verwenden Sie YFCLogCategory.
  • Entfernen Sie org.apache.log4j.Level und verwenden Sie bestimmte Methoden in YFCLogCategory.
Paketierung log4j-1.2.17.jar

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 die JAR-Datei log4j 1.x im Anpassungspaket packen, das älter als Version 1.2.17 ist, und wenn Sie die JAR-Datei log4j 1.x benötigen, um Ihre angepassten Codeabhängigkeiten zu unterstützen, müssen Sie die alte JAR-Datei und das Paket log4j-1.2.17.jarentfernen.
Anmerkung: Packaging log4j-1.2.17.jar ist eine temporäre Option. log4j-1.2.17.jar ist veraltet und wird von Apachenicht unterstützt. IBM beschränkt die Paketierung von log4j-1.2.17.jar in zukünftigen Releases.
Bibliotheken anderer Anbieter

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.