Injectar log objeto em Grails classe fora do grails-app
-
05-07-2019 - |
Pergunta
Eu tenho uma classe em src / Groovy em meus grails projeto.
Como posso fazer um campo de log que obtém injetado com o logger correta para essa classe?
Existe uma commons logging ou apenas log4j em grails?
Solução
Você gostaria de adicioná-lo como uma classe Java normal:
Logger log = Logger.getLogger(getClass()) // log4j
ou
Log log = LogFactory.getLog(getClass()) // commons logging
Outras dicas
Grails 1.X
Uma maneira mais Groovy para fazer a mesma coisa é:
private static log = LogFactory.getLog(this)
Esta tira vantagem do facto de que this
num contexto estático refere-se ao objecto Class
, de modo que a linha de cima pode ser colada contra cópia a partir de uma classe para a outra, sem modificação.
Grails 2.X
Use a @ Log4j anotação introduzido em Groovy 1.8. Isto irá adicionar uma propriedade log
import groovy.util.logging.Log4j
@Log4j
class MyClass {
def doIt() {
log.info 'hello'
}
}
Uma boa vantagem de usar a anotação é que o logger converte automaticamente chama como esta:
log.info 'hello'
para:
if (log.isInfoEnabled() {
log.info 'hello'
}
Usando o padrão novo Logger de Log4j (getClass ()) trabalhou, mas logado 'java.lang.Class' para mim (usando Grails 1.2.1). Este problema foi embora com o plugin Sublog e @WithLog. Consulte http://www.grails.org/plugin/sublog . Este plugin também não faz rastreamento tornar Debug e Erro Fatal ...!