Migrazione a log4j2
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.
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)
Il metodo YFCLogCategory.getLogger() non è supportato. Utilizzare invece il metodo YFCLogCategory.instance(Class.class) .
private static YFCLogCategory logger = YFCLogCategory.instance(MyClassName.class);- Se stai eseguendo il casting dell'istanza
YFCLogCategoryinorg.apache.log4j.Categoryoorg.apache.log4j.Logger, non è supportata. Il casting di un'istanza diYFCLogCategoryinorg.apache.log4j.Loggeroorg.apache.log4j.Categorynon viene compilato quando si scrive un nuovo codice. Per il codice personalizzato esistente che ha questi cast, il codice personalizzato incontraClassCastExceptional 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 classeYFCLogCategory. - 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.
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 .
- Rimuovere
org.apache.log4j.Loggere utilizzareYFCLogCategory. - Rimuovere
org.apache.log4j.Levele utilizzare metodi specifici inYFCLogCategory.
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 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.