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?

Foi útil?

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 ...!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top