在测试[运行 grails test-app, Grails 1.3.5] 期间,Grails 日志记录几乎没有问题:
1
我的应用程序中有一些调试/信息日志记录,并且在运行应用程序 [grails run-app] 时工作正常。
但是,当我想测试我的应用程序时,它既没有写入 System.out/System.err 文件,也没有写入文件附加程序。
我该如何启用它?
我的域类中有 log.debug() 和 log.info() 行。在 Controller 和位于 src/groovy 的类中。
当我想在测试期间启用日志记录时,我只是从我的开发环境中复制了设置,并将根记录器从信息更改为调试:
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'
正如我之前所说。如果我在开发环境中运行应用程序,一切正常。这只是我看不到我的日志的测试。
这里要提一下:我可以看到我在测试类中指定的 log.info() 行。
2
我无法在测试类中指定 log.debug。我在尝试执行 log.debug 时缺少方法异常。 log.info 工作得很好。怎么会?我认为这与 Controller /域中的注入(inject)相同。
3
测试期间记录在测试类中的所有信息都发送到 System.err 而不是 System.out。
grails 甚至使用 Config.groovy 中的 log4j 配置吗?
提前致谢,
克里斯蒂安
最佳答案
我所做的只是定义我自己的记录器并将其注入(inject)到我的测试用例中的 Controller 或服务中。
BasicConfigurator.configure()
LogManager.rootLogger.level = Level.DEBUG
log = LogManager.getLogger("MailService")
MailService.class.metaClass.getLog << {-> log}
我不相信 log 属性被注入(inject)到测试类中
我之前也做过这件事,结果证明这更像是一种黑客行为,但有效
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 }
Final Code Solution Here
关于logging - 集成测试期间的 Grails 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4023884/