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:)