2012-02-29 62 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 
      ... 
     ) 
}