对于grails的日志输出,我真的是给弄吐血了。开始以为很简单,后来发现grails封装log4j做的有点太多了,很多东西的封装理解了觉得还挺合理,但是不理解的话真是无比迷茫。对于是否有必要做这么多强制性约束,我保留意见...(不知道是不是rails的约定,希望是因为自己无知)
先说一个笨人的办法,但是容易和后面的研究混淆,如果怕麻烦就这么弄好了
在log4j的配置里面加上
- root {
- info 'stdout'
- additivity = true
- }
基本不用管太多了,应用程序里面的error日志一样可以打,只有遇到测试类的error日志才会停。
但是在测试环境下,我们希望的是遇到error就可以停了。那么具体的log4j的配置文件如下(加上不同环境的日志级别更方便)
- log4j = {
- environments {
- production {
- appenders {
- rollingFile name:"file", maxFileSize:1024, file:"logs/myApp.log"
- }
- warn file:'grails.app'
- }
- development {
- appenders {
- console name:'stdout', layout:pattern(conversionPattern: '%c{2} %m%n')
- }
- info stdout:'grails.app'
- }
- test {
- appenders {
- console name:'stdout', layout:pattern(conversionPattern: '%c{2} %m%n')
- }
- debug stdout:'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'
- }
这个配置应该就是比较合理的了,正常程序输出就会打日志。但是有几个地方注意一下:
1. 在测试环境下,如果遇到有error级别的日志,那么后面的日志也全都不打印了。方便查找问题,很贴心的设计~
2. 在测试类中,不允许debug级别日志,其实测试也不需要这个级别。应该是grails为了规范而做的限制
3. unit test下面是不能使用log,应该是没有注入
4. 在测试环境下,输出的error日志到test reports中去看
本文转自passover 51CTO博客,原文链接:http://blog.51cto.com/passover/425483,如需转载请自行联系原作者