Объект ввода объекта в классе Grails вне grails-app

У меня есть класс в src/ groovy в моем проекте grails.

Как создать поле журнала, в которое вводится правильный журнал для этого класса?

Существует ли ведомость общин или просто log4j в графе?

Ответы

Ответ 1

Вы добавили бы его как обычный Java-класс:

Logger log = Logger.getLogger(getClass()) // log4j

или

Log log = LogFactory.getLog(getClass()) // commons logging

Ответ 2

Grails 1.X

Более Groovy способ сделать то же самое:

private static log = LogFactory.getLog(this)

Это использует тот факт, что this в статическом контексте относится к объекту Class, поэтому приведенная выше строка может быть скопирована с одного класса на другой без изменений.

Grails 2.X

Используйте аннотацию @Log4j, представленную в Groovy 1.8. Это добавит свойство log

import groovy.util.logging.Log4j
@Log4j 
class MyClass {

  def doIt() {
    log.info 'hello'
  }
}

Хорошим преимуществом использования аннотации является то, что регистратор автоматически преобразует вызовы, такие как:

log.info 'hello'

в

if (log.isInfoEnabled() {
  log.info 'hello'
}

Ответ 3

Использование стандартного Log4j нового Logger (getClass()) работало, но зарегистрировало java.lang.Class для меня (используя Grails 1.2.1). Эта проблема ушла с плагином Sublog и @WithLog. См. http://www.grails.org/plugin/sublog. Этот плагин также не позволяет Trace стать Debug и Fatal Error...!