2011-09-06 25 views
18

Se puede acceder a la clase desde varios subprocesos. Debe ser logger en este caso también ser definitiva y estática? Gracias.¿Debería ser el registrador siempre final y estático?

+2

Un ejemplo de código podría ayudar a aclarar la pregunta. – Peter

+0

Consulte también esta publicación para obtener más información sobre esta práctica recomendada http://stackoverflow.com/questions/6653520/why-do-we-declare-loggers-static-final –

+0

Puede deshacerse de esta variable si utiliza [jcabi-log] (http://www.jcabi.com/jcabi-log/), un contenedor estático alrededor de slf4j – yegor256

Respuesta

28

Todos los principales paquetes de registro de java (java.util.logging, log4j, etc.) están sincronizados y son seguros para la ejecución de subprocesos. El patrón estándar de un registrador private final static por clase está bien, incluso si se llama a la clase desde varios subprocesos.

4

Sí, el registrador debe ser estático y definitivo. También preferiblemente privado. Solo debe haber una instancia de registrador por clase y, a menos que cambie dinámicamente la preferencia de registro, es mejor que sea definitiva.

El registrador es seguro para subprocesos y no tiene que preocuparse por el enhebrado.

2

Al hacer que el registrador final y/o estático no afecte de ninguna manera a la seguridad del hilo del uso del registrador. Si la instancia del registrador se está utilizando desde varios subprocesos, asegúrese de estar utilizando un registrador seguro para subprocesos.

En general, el registrador debe ser privado estático final, pero no suponga que esto lo hace seguro para subprocesos. Los marcos de trabajo de registro más comunes son seguros para subprocesos, por lo que si está utilizando uno de estos, debería estar bien.

Cuestiones relacionadas