2012-07-04 1 views
5

voglio iniettare un Logger Log4j (o in caso di generalità qualsiasi classe) in tutte le mie classi che ha una proprietà di registro:Groovy Dependency Injection

def log 

Questo viene fatto in Grails automaticamente. Voglio avere la stessa funzionalità in normali app groovy, diciamo per tutti i file groovy sotto src. La specialità con Log4j è che il logger deve conoscere la classe da registrare. (Logger.getLogger(Class clazz))

Come posso ottenere questo risultato?

risposta

11

Hai visto il @Logannotation added in Groovy 1.8?

+0

Impressionante! Devo averlo perso. Voi ragazzi fate davvero un buon lavoro lì! Grazie. – matcauthon

+0

In realtà, al momento della stesura di questo, l'annotazione per log4j e slf4j [sembra] (https://jira.codehaus.org/browse/GROOVY-5557) deve essere [rotta] (https: //jira.codehaus. org/browse/GROOVY-5574) in Groovy 2.0 ... –

+1

Aveva uno sguardo in esso, e sembra essere un problema di classpath ... fintanto che log4j è sul classpath quando gli script sono eseguiti, l'annotazione dovrebbe funzionare bene :-D –

3

Groovy fornisce supporto nativo per questo utilizzando @Log4j annotation sulla classe. Questo crea una punta log campo alla Log4J Logger con lo stesso nome della classe in questione, vale a dire .:

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

@Log4j 
public class LogExample { 
} 

è l'equivalente di

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