2011-09-06 5 views
18

È 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?

+2

Un esempio di codice può aiutare a chiarire la domanda. – Peter

+0

Vedi anche questo post per ulteriori discussioni su questa best practice http://stackoverflow.com/questions/6653520/why-do-we-declare-loggers-static-final –

+0

puoi sbarazzarti di questa variabile se usi [jcabi-log] (http://www.jcabi.com/jcabi-log/), un wrapper statico attorno a slf4j – yegor256

risposta

28

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.

4

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.

2

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.