2010-11-24 11 views
5

Estoy usando un singleton enum, pero implementar el registro es problemático. Este:¿Cómo implemento el registro en un enum singleton?

public enum Foo { 
    INSTANCE; 

    private final Logger log = Logger.getLogger(Foo.class.getName()); 

    ... 
} 

El registrador se crea una instancia en la forma en que iba a instancias de un registrador para una clase Java normal, pero por supuesto me sale el siguiente error:

Foo.java: illegal reference to static field from initializer 

¿Hay una manera equivalente a iniciar sesión enum singletons?

Respuesta

15

En respuesta a su pregunta, simplemente hacer que el registrador estático ...

Por cierto, creo que es una práctica habitual utilizar un registrador estático incluso para las instancias de objeto. En otras palabras, el registrador está en la clase; todos los objetos usan las referencias del registrador estático.

Ver

http://logging.apache.org/log4j/1.2/manual.html

mayoría de los ejemplos de la utilización de un registrador de ahí tienen el registrador como una propiedad estática ...

+2

+1 para registrador estático. SLF4J también tiene una discusión interesante: http://www.slf4j.org/faq.html#declared_static –

3

Acceder de forma dinámica:

Logger.getLogger(Foo.class.getName()).info("log info"); 
+2

Sería muy tedioso escribir eso cada vez ... – harto

+1

No es realmente si usa un IDE. configurate una plantilla. En Eclipse, utilizo "log" para expandir esta plantilla desde una entrada de registro de depuración rápida. – Nerdfest

+0

¿Cuál es la ventaja de ese método? –

2

Un poco más corto: utilice un método: registrador(). depuración (...)

private static Logger logger() 
{ 
    if(logger == null) 
    { 
     logger = Logger.getLogger(AnEnum.class); 
    } 

    return logger; 
} 

/** Logger **/ 
private static Logger logger; 
Cuestiones relacionadas