È possibile accedere alla classe da più thread. Deve essere logger anche in questo caso essere definitivo e statico? Grazie.Il logger dovrebbe essere sempre definitivo e statico?
risposta
Tutti i principali pacchetti di registrazione java (java.util.logging
, log4j
, ecc.) Sono sincronizzati e thread-safe. Il modello standard di un logger private final static
per classe va bene anche se la classe viene chiamata da più thread.
Sì, il logger deve essere statico e definitivo. Anche preferibilmente privato. C'è bisogno di una sola istanza di logger per classe e inoltre, a meno che non si cambi la preferenza del registro in modo dinamico, è meglio renderla definitiva.
I logger sono thread-safe e non è necessario preoccuparsi della filettatura.
Rendere il logger definitivo o statico non influirà in alcun modo sulla sicurezza del thread dell'utilizzo del logger. Se l'istanza del logger viene utilizzata da più thread, assicurarsi di utilizzare un logger sicuro per i thread.
In generale, il logger deve essere statico finale privato, ma non dare per scontato che questo lo rende thread-safe. I framework di logging più comuni sono thread-safe, quindi se stai usando uno di questi dovresti essere bravo.
Un esempio di codice può aiutare a chiarire la domanda. – Peter
Vedi anche questo post per ulteriori discussioni su questa best practice http://stackoverflow.com/questions/6653520/why-do-we-declare-loggers-static-final –
puoi sbarazzarti di questa variabile se usi [jcabi-log] (http://www.jcabi.com/jcabi-log/), un wrapper statico attorno a slf4j – yegor256