logging - 集成测试期间的 Grails 日志记录

标签 logging grails log4j

在测试[运行 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/

相关文章:

java - Grails 新项目无法解析依赖项

syntax - 在 elasticsearch 中向 appender 添加过滤器 - 记录 yml 语法

facebook - Facebook 如何存储它的日志数据?

java - 有关 ServiceEvent 和 BundleEvent 的 Felix 日志级别

python - 如何简化Python日志代码

java - log4j:在生产/开发中对标准输出文件/控制台的不同使用

java - 在 Java EE 应用程序中找不到 Log4j.xml 抛出文件

logging - 如何配置 Tomcat AccessLogValve 隐藏密码?

grails - 如何将 Grails DB 迁移与 Spring Security 和默认数据库 H2 结合使用?

grails - Grails如何使用belongsTo关联将数据保存在表中?