Внедрить объект журнала в класс Grails вне приложения Grails

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

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

Есть ли ведение журнала Commons или просто log4j в Grails?


person Azder    schedule 11.09.2009    source источник


Ответы (3)


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

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

or

Log log = LogFactory.getLog(getClass()) // commons logging
person Burt Beckwith    schedule 11.09.2009
comment
Вот как я решил это, ATM, но по-прежнему означает, что мой класс привязан к системе ведения журнала, даже когда изменяются компоненты ведения журнала всего приложения. - person Azder; 11.09.2009

Грааль 1.Х

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

private static log = LogFactory.getLog(this)

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

Грааль 2.Х

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

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

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

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

log.info 'hello'

to:

if (log.isInfoEnabled() {
  log.info 'hello'
}
person Dónal    schedule 09.10.2009
comment
Не может работать: это недоступно во время инициализации статического поля. - person Azder; 13.10.2009
comment
Это работает, потому что в Groovy this в статическом контексте относится к объекту Class. Очевидно, в этом разница между Java и Groovy. Попробуйте, если не верите мне :) - person Dónal; 13.10.2009
comment
Я предполагаю, что пакет будет org.slf4j.LoggerFactory, это правильно? - person Chad Gorshing; 14.12.2009
comment
Нет, это log4J LogFactory - person Dónal; 14.12.2009
comment
Для полноты и правильности нам нужно добавить оператор «import», а «@Log4J» на самом деле является «@Log4j». Я могу подтвердить, что он работает в классе /src/groovy с Grails 2.2.2: import groovy.util.logging.Log4j @Log4j class MiscUtils {...log.info m: ${m}...} - person user1559679; 01.08.2013
comment
Для версий 1.x не забудьте import org.apache.commons.logging.LogFactory. - person rodvlopes; 16.08.2017

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

person Olivier Gourment    schedule 14.04.2010
comment
Привет, Оливье, этот вопрос уже устарел, так как он предназначался для Grails 1.0.4. - person Azder; 18.04.2010
comment
Однако в вопросе об этом не упоминается. Мой ответ остается в силе! :-) - person Olivier Gourment; 02.05.2010