У меня есть класс в src/groovy в моем проекте Grails.
Как создать поле журнала, в которое вводится правильный регистратор для этого класса?
Есть ли ведение журнала Commons или просто log4j в Grails?
У меня есть класс в src/groovy в моем проекте Grails.
Как создать поле журнала, в которое вводится правильный регистратор для этого класса?
Есть ли ведение журнала Commons или просто log4j в Grails?
Вы бы добавили его так же, как обычный класс Java:
Logger log = Logger.getLogger(getClass()) // log4j
or
Log log = LogFactory.getLog(getClass()) // commons logging
Более Groovy способ сделать то же самое:
private static log = LogFactory.getLog(this)
Это использует тот факт, что this в статическом контексте относится к объекту Class, поэтому приведенную выше строку можно скопировать и вставить из одного класса в другой без изменений.
Используйте аннотацию @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'
}
this в статическом контексте относится к объекту Class. Очевидно, в этом разница между Java и Groovy. Попробуйте, если не верите мне :)
- person Dónal; 13.10.2009
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...!