Un logger Log4J dovrebbe essere dichiarato transitorio?

2022-07-29 11:00:29

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

Source
Risposta


31
  • 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.