2012-02-29 44 views
2

有没有办法在Grails log4j DSL配置中指定log4j过滤器?我需要在我的Grails log4j配置中定义类似这样的东西:Grails Log4j中的Log4j过滤器DSL配置

<filter class="org.apache.log4j.filter.ExpressionFilter"> 
    <param name="expression" value="EXCEPTION ~= com.company.BackendNotAvailableException" /> 
    <param name="acceptOnMatch" value="false"/> 
</filter> 

我使用Grails 1.3.7。

回答

4

我已经加入短初始化代码解决此问题,努力BootStrap.groovy中

Logger.rootLogger.allAppenders.each { appender -> 
    ExpressionFilter filter = new ExpressionFilter() 
    filter.expression = "EXCEPTION ~= org.springframework.security.authentication.*" 
    filter.acceptOnMatch = false 
    filter.activateOptions() 
    appender.addFilter(filter) 
} 
0

谢谢您的指针。我也做了同样的事情没有ExpressionFilter,这样我就不用加载额外的Log4j的附加模块,使用快速Groovy closure coercion

import org.apache.log4j.Logger 
import org.apache.log4j.spi.Filter 

Logger.rootLogger.allAppenders*.addFilter({ event -> 
    event.loggerName == "some.logger.name" && event.message =~ /text to ignore/ 
    ? Filter.DENY : Filter.NEUTRAL 
} as Filter) 

在我的情况,我想筛选由Hibernate生成一些虚假信息所以我把这段代码放在Config.groovy中,因为Bootstrap太晚了。

1

只是一个更新,偶然到这个问题,并发现了另一种解决方案(希望能为这个为参考):

Config.groovy中

Filter expFilter = new org.apache.log4j.filter.ExpressionFilter() 
expFilter.setExpression('EXCEPTION ~= com.company.BackendNotAvailableException') 
expFilter.setAcceptOnMatch(false) 

log4j = { 
    appenders { 
     appender new DailyRollingFileAppender(
      ... 
      // This is where we set the filter: 
      headFilter: expFilter 
      ... 
     ) 
}