对于grails的日志输出,我真的是给弄吐血了。开始以为很简单,后来发现grails封装log4j做的有点太多了,很多东西的封装理解了觉得还挺合理,但是不理解的话真是无比迷茫。对于是否有必要做这么多强制性约束,我保留意见...(不知道是不是rails的约定,希望是因为自己无知)

 
先说一个笨人的办法,但是容易和后面的研究混淆,如果怕麻烦就这么弄好了
在log4j的配置里面加上
 
    
    
    
    
  1. root { 
  2.   info 'stdout' 
  3.   additivity = true 
基本不用管太多了,应用程序里面的error日志一样可以打,只有遇到测试类的error日志才会停。
 
但是在测试环境下,我们希望的是遇到error就可以停了。那么具体的log4j的配置文件如下(加上不同环境的日志级别更方便)
 
    
    
    
    
  1. log4j = {  
  2.   environments {  
  3.     production {  
  4.       appenders {  
  5.         rollingFile name:"file", maxFileSize:1024, file:"logs/myApp.log"  
  6.     }  
  7.     warn file:'grails.app'  
  8.   }  
  9.  
  10.   development {  
  11.     appenders {  
  12.       console name:'stdout', layout:pattern(conversionPattern: '%c{2} %m%n')  
  13.   }  
  14.     info stdout:'grails.app'  
  15.   }  
  16.   
  17.   test {  
  18.     appenders {  
  19.       console name:'stdout', layout:pattern(conversionPattern: '%c{2} %m%n')  
  20.      }  
  21.     debug stdout:'grails.app'  
  22.     }  
  23.   }  
  24.       
  25.     error  'org.codehaus.groovy.grails.web.servlet',  //  controllers  
  26.            'org.codehaus.groovy.grails.web.pages', //  GSP  
  27.            'org.codehaus.groovy.grails.web.sitemesh', //  layouts  
  28.            'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping  
  29.            'org.codehaus.groovy.grails.web.mapping', // URL mapping  
  30.            'org.codehaus.groovy.grails.commons', // core / classloading  
  31.            'org.codehaus.groovy.grails.plugins', // plugins  
  32.            'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration  
  33.            'org.springframework',  
  34.            'org.hibernate',  
  35.            'net.sf.ehcache.hibernate'  
  36.   
  37.     warn   'org.mortbay.log'  
  38. }  
这个配置应该就是比较合理的了,正常程序输出就会打日志。但是有几个地方注意一下:
1. 在测试环境下,如果遇到有error级别的日志,那么后面的日志也全都不打印了。方便查找问题,很贴心的设计~
2. 在测试类中,不允许debug级别日志,其实测试也不需要这个级别。应该是grails为了规范而做的限制
3. unit test下面是不能使用log,应该是没有注入
4. 在测试环境下,输出的error日志到test reports中去看