Sto usando Java 1.4 con Log4J.
Parte del mio codice prevede la serializzazione e la deserializzazione di oggetti valore (POJO).
Ciascuno dei miei POJO dichiara un logger con
private final Logger log = Logger.getLogger(getClass());
Il serializzatore si lamenta del fatto che org.apache.log4j.Logger non è serializzabile.
Dovrei usare
private final transient Logger log = Logger.getLogger(getClass());
invece?
- Vihung
Che ne dici di usare un logger statico? O hai bisogno di un riferimento logger diverso per ogni istanza della classe? I campi statici non sono serializzati per impostazione predefinita; puoi dichiarare esplicitamente i campi da serializzare con un array finale privato, statico di ObjectStreamField
denominato serialPersistentFields
. Consulta la documentazione Oracle
Contenuto aggiunto: Quando utilizzi getLogger (getClass()), utilizzerai lo stesso logger in ogni istanza. Se vuoi usare un logger separato per ogni istanza devi differenziare il nome del logger nel metodo getLogger(). per esempio. getLogger(getClass().getName() + hashCode()). Dovresti quindi utilizzare l'attributo transitorio per assicurarti che il logger non sia serializzato.