Grails在集成测试期间记录

Kry*_*ian 14 grails logging log4j

在测试[运行grails test-app,Grails 1.3.5]时,Grails日志记录几乎没有问题:

1

我在我的应用程序中有一些调试/信息记录,它在运行应用程序[grails run-app]时工作正常.但是,当我想测试我的应用程序时,它们都没有写入System.out/System.err文件,也没有写入文件appender.我该如何启用它?

我的域类中有log.debug()和log.info()行.在控制器和位于src/groovy的类中.

当我想在测试期间启用日志记录时,我只是从我的开发环境中复制了设置,并将root logger从info更改为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'
Run Code Online (Sandbox Code Playgroud)

正如我之前所说的那样.如果我在开发环境中运行应用程序,一切正常.这只是我无法看到我的日志的测试.

这里要提一下:我可以在Test类中看到我的log.info()行.

2我无法在Test类中指定log.debug.我在尝试做log.debug时遇到方法异常.log.info工作得很好.怎么会?我认为它与控制器/域内的注入相同.

3测试期间记录在测试类中的所有信息都将发送到System.err而不是System.out.Grails甚至使用Config.groovy的log4j配置?

提前谢谢,克里斯蒂安

Aar*_*ers 5

我所做的只是定义我自己的记录器并将其注入到我的测试用例中的控制器或服务中。

    BasicConfigurator.configure() 
    LogManager.rootLogger.level = Level.DEBUG
    log = LogManager.getLogger("MailService")

    MailService.class.metaClass.getLog << {-> log}
Run Code Online (Sandbox Code Playgroud)

我不相信日志属性被注入到测试类中

我之前也做过这件事,结果证明更像是一种黑客行为,但有效

    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 }
Run Code Online (Sandbox Code Playgroud)

最终代码解决方案在这里