Grails Logging во время интеграционных тестов
У меня есть несколько проблем с регистрацией Grails во время теста [running grails test-app, Grails 1.3.5]:
1
У меня есть отладочное/информационное ведение журнала в моем приложении, и он отлично работает при запуске приложения [grails run-app].
Однако, когда я хочу протестировать мое приложение, ни одно из них не записывается в файлы System.out/System.err или файл appender.
Как включить его?
У меня есть строки log.debug() и log.info() в классах домена. в контроллерах и в классах, расположенных в src/ groovy.
Когда я хотел включить ведение журнала во время теста, я просто скопировал настройки из моей среды dev и изменил корневой журнал с информацией на debug:
appenders {
file name: 'file', file: 'mylog.log'
}
root {
debug 'stdout', 'file'
}
debug 'grails.app'
error 'org.codehaus.groovy.grails.web.servlet', // controllers
'org.codehaus.groovy.grails.web.pages', // GSP
'org.codehaus.groovy.grails.web.sitemesh', // layouts
'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
'org.codehaus.groovy.grails.web.mapping', // URL mapping
'org.codehaus.groovy.grails.commons', // core / classloading
'org.codehaus.groovy.grails.plugins', // plugins
'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
'org.springframework',
'org.hibernate',
'net.sf.ehcache.hibernate'
warn 'org.mortbay.log'
Как я уже говорил. Все работает нормально, если я запускаю приложение в среде dev. Это только тест, который я не вижу в моих журналах.
Что-то, что можно здесь упомянуть: я вижу строки log.info(), указанные в классах Test.
2
Я не могу указать log.debug в классах Test. При попытке сделать log.debug я получаю исключение метода. log.info работает нормально. Как так? Я думал, что это то же самое, что и внутри контроллеров/доменов.
3
Вся информация, зарегистрированная в тестовых классах во время теста, отправляется в System.err вместо System.out.
Является ли grails даже с помощью конфигурации log4j из Config.groovy?
Спасибо заранее,
Krystian
Ответы
Ответ 1
то, что я делаю, просто определяет мой собственный регистратор и вводит его в контроллер или службу в моем тестовом случае.
BasicConfigurator.configure()
LogManager.rootLogger.level = Level.DEBUG
log = LogManager.getLogger("MailService")
MailService.class.metaClass.getLog << {-> log}
Я не верю, что свойство log вводится в тестовые классы
Я также сделал это, прежде чем оказался более взломанным, но работал
def logger = new Expando(
debug: { println it },
info: { println it },
warn: { println it },
error: { println it })
MailService.metaClass.getLog = {-> logger }
MailServiceService.metaClass.getLog = {-> logger }
MailIngestJobTests.metaClass.getLog = {-> logger }
Окончательное решение для кода здесь
Ответ 2
Я думаю, что вы можете использовать что-то вроде:
mockLogging(Foo, true)
Где Foo - это домен, служба и т.д.
Здесь будут записываться сообщения log.debug на консоль. Просто попробуйте удалить его, прежде чем делать какие-либо отчеты, так как они станут looooooong:)