Inyectar objeto de registro en la clase Grails fuera de la aplicación grails
-
05-07-2019 - |
Pregunta
Tengo una clase en src / groovy en mi proyecto de griales.
¿Cómo hago un campo de registro que se inyecta con el registrador correcto para esa clase?
¿Hay un registro de commons o simplemente log4j en grails?
Solución
Lo agregarías como una clase de Java normal:
Logger log = Logger.getLogger(getClass()) // log4j
o
Log log = LogFactory.getLog(getClass()) // commons logging
Otros consejos
Grails 1.X
Una forma más inteligente de hacer lo mismo es:
private static log = LogFactory.getLog(this)
Esto se aprovecha del hecho de que this
en un contexto estático se refiere al objeto Class
, por lo que la línea anterior se puede copiar y pegar de una clase a otra sin modificación.
Grails 2.X
Use la anotación @ Log4j introducida en Groovy 1.8. Esto agregará una propiedad log
import groovy.util.logging.Log4j
@Log4j
class MyClass {
def doIt() {
log.info 'hello'
}
}
Una buena ventaja de usar la anotación es que el registrador convierte automáticamente llamadas como esta:
log.info 'hello'
a:
if (log.isInfoEnabled() {
log.info 'hello'
}
Usando el nuevo Logger estándar Log4j (getClass ()) funcionó, pero registré 'java.lang.Class' para mí (usando Grails 1.2.1). Este problema desapareció con el complemento de Sublog y @WithLog. Consulte http://www.grails.org/plugin/sublog . ¡Este complemento tampoco hace que Trace se convierta en Debug y Fatal Error ...!