Grails Log4j DSL配置中的Log4j过滤器

时间:2012-02-29 16:53:25

标签: grails log4j

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

<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。

3 个答案:

答案 0 :(得分: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)
}

答案 1 :(得分: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
            ...
        )
}

答案 2 :(得分:0)

感谢您的指针。我没有使用ExpressionFilter做同样的事情,因此我不必使用快速Groovy closure coercion加载额外的Log4j Extras模块:

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执行得太晚了。