Migrazione a log4j2


Con la versione 22.1 minor update 1, IBM Sterling® Order Management System utilizza log4j2 per la registrazione e non invia il file log4j v1.2.17.jar.

La classe YFCLogCategory, utilizzata principalmente per il logging dal codice di Sterling™ Order Management System e utilizzata anche dal codice del cliente, non estende org.apache.log4j.Category, che è una classe di log4j 1.x Il codice personalizzato è interessato da questa release se si utilizzano metodi non definiti dalla classe YFCLogCategory . I metodi che non sono definiti dalla classe YFCLogCategory e che sono disponibili dalla classe parent org.apache.log4j.Category non sono supportati.

Dopo aver applicato la release 22.1 aggiornamento minore 1 , è possibile esaminare i metodi nel Javadoc principale aggiornato. I seguenti metodi vengono aggiunti alla classe YFCLogCategory per garantire che non si verifichino errori di runtime del codice personalizzato. Tuttavia, questi sono metodi fittizi e potrebbero essere rimossi in una release successiva.
  • public void log(Object level, Object obj)
  • public void setLevel(Object level)
  • public boolean isEnabledFor(Object level)
Modifiche al codice personalizzato
Importante:

Il metodo YFCLogCategory.getLogger() non è supportato. Utilizzare invece il metodo YFCLogCategory.instance(Class.class) .

Ad esempio:
private static YFCLogCategory logger = YFCLogCategory.instance(MyClassName.class);
Controlla il tuo codice personalizzato e apporta le seguenti modifiche:
  • Se stai eseguendo il casting dell'istanza YFCLogCategory in org.apache.log4j.Category o org.apache.log4j.Logger, non è supportata. Il casting di un'istanza di YFCLogCategory in org.apache.log4j.Logger o org.apache.log4j.Category non viene compilato quando si scrive un nuovo codice. Per il codice personalizzato esistente che ha questi cast, il codice personalizzato incontra ClassCastException al runtime. Ad esempio, le righe #2 e #3 del seguente modello di codice non sono supportate.
    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
  • Se si sta richiamando log(Level level, Object), sostituirlo con metodi specifici come error (Object) o debug (Object) forniti dalla classe YFCLogCategory .
  • Se si sta richiamando setLevel(Level level), è necessario eliminarlo. Non puoi cambiare i livelli dei logger in log4j2 perché non è supportata nell'API log4j2 . Un'ulteriore gestione dei livelli di log viene eseguita dal codice ed è necessario creare tracce per parti specifiche del codice per cui si desidera la registrazione estesa.
  • Se si chiama isEnabledFor(Level level), sostituirlo con metodi specifici come isInfoEnabled o isTimerEnabled.
Eliminazione log4j-1.2.17.jar

Sterling Order Management System sta rimuovendo log4j 1.2.17 Jar dal Jar fornito per motivi di sicurezza, pertanto è necessario rimuovere tutte le chiamate dirette alle classi org.apache.log4j.* . Se non si è in grado di eliminare le chiamate o le importazioni delle classi org.apache.log4j.* , è necessario includere il Jar log4j 1.2.17 nel pacchetto di personalizzazione scaricandolo dal sito ufficiale Apache .

Apportare le seguenti modifiche al codice:
  • Rimuovere org.apache.log4j.Logger e utilizzare YFCLogCategory.
  • Rimuovere org.apache.log4j.Level e utilizzare metodi specifici in YFCLogCategory.
Imballaggio log4j-1.2.17.jar

IBM consiglia di non utilizzare direttamente le classi Apache log4j (v2 o v1). È possibile utilizzare YFCLogCategory, che impedisce di essere esposti alle modifiche nell'API di registrazione sottostante in Sterling Order Management System.

Se stai impacchettando log4j 1.x Jar nel pacchetto di personalizzazione, che è precedente alla versione 1.2.17 e se hai bisogno del Jar log4j 1.x per supportare le tue dipendenze del codice personalizzato, devi rimuovere il vecchio Jar e il pacchetto log4j-1.2.17.jar.
Nota: Impacchettamento log4j-1.2.17.jar è un'opzione temporanea. log4j-1.2.17.jar è obsoleto e non è disponibile alcun supporto da Apache. IBM limiterà il packaging di log4j-1.2.17.jar nelle release future.
Librerie di altri fornitori

Se si dispone di librerie di terze parti che hanno dipendenze su log4j 1.x Jars, ricercare tali Jars eseguendo il seguente comando rispetto al contenuto estratto del file Jar di terze parti che si sta impacchettando nel pacchetto di personalizzazione.

jar -xvf <third-party jar>
grep -rnw 'org.apache.log4j'

Questo comando stampa le classi che dipendono dal Jar log4j 1.x . Se vengono trovati dei risultati, è necessario verificare se è disponibile una versione aggiornata di tale file Jar.

Alcune librerie di terze parti relative alla registrazione, come slf4j o commons - logging, potrebbero avere la dipendenza Jar log4j 1.x , ma è possibile ignorare queste librerie.