2012-07-04 15 views
5

Quiero inyectar un Logger Log4J (o en el caso de la generalidad de cualquier clase) en todas mis clases que tiene una propiedad de registro:maravilloso de la inyección de dependencias

def log 

esto se hace de forma automática Grails. Quiero tener la misma característica en las aplicaciones normales de Groovy, digamos para todos los archivos groovy en src. La especialidad con Log4j es que el registrador necesita saber la clase que debe registrarse. (Logger.getLogger(Class clazz))

¿Cómo puedo lograrlo?

Respuesta

11

¿Has visto el @Logannotation added en Groovy 1.8?

+0

impresionante! Debo haber perdido eso. ¡Ustedes realmente hacen un buen trabajo allí! Gracias. – matcauthon

+0

En realidad, al momento de escribir esto, la anotación para log4j y slf4j [parece] (https://jira.codehaus.org/browse/GROOVY-5557) estar [interrumpida] (https: //jira.codehaus. org/browse/GROOVY-5574) en Groovy 2.0 ... –

+1

Hemos echado un vistazo, y parece ser un problema de classpath ... siempre que log4j esté en classpath cuando se ejecuten los scripts, la anotación debería funcionar bien :-RE –

3

Groovy proporciona soporte nativo para esto utilizando el @Log4j annotation en la clase. Esto crea un puntero que log campo al registrador Log4J con el mismo nombre que la clase en cuestión, es decir .:

package com.example 
import groovy.util.logging.Log4j 

@Log4j 
public class LogExample { 
} 

es el equivalente de

package com.example 
public class LogExample { 
    private static final Logger log = Logger.getLogger(LogExample.class) 
} 
Cuestiones relacionadas