Grails Log4j DSL配置中的Log4j过滤器

Grails Log4j DSL配置中的Log4j过滤器,grails,log4j,Grails,Log4j,有没有办法在配置中指定log4j过滤器?我需要在grailslog4j配置中定义类似的内容: <filter class="org.apache.log4j.filter.ExpressionFilter"> <param name="expression" value="EXCEPTION ~= com.company.BackendNotAvailableException" /> <param name="acceptOnMatch" valu

有没有办法在配置中指定log4j过滤器?我需要在grailslog4j配置中定义类似的内容:

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


我使用Grails1.3.7。

我通过向Bootstrap.groovy添加一个简短的init代码来解决这个问题

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

谢谢你的指点。我在没有ExpressionFilter的情况下也做了同样的事情,这样我就不必加载额外的Log4j Extras模块,只需使用以下快捷方式:


在我的例子中,我想在启动时过滤Hibernate生成的一些虚假消息,所以我将这些代码放在Config.groovy中,因为引导执行得太晚了。

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

在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
            ...
        )
}
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
            ...
        )
}