有没有办法在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。
答案 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执行得太晚了。