Java 使用属性文件的log4j的多个过滤器

Java 使用属性文件的log4j的多个过滤器,java,filter,configuration,log4j,Java,Filter,Configuration,Log4j,我正在尝试使用此配置筛选日志消息(我假装忽略包含文本无法刷新目标的JMS连接的消息,以及包含org.apache.activemq.transport.FailoverTransport的消息): 但只有第一个过滤器在工作。配置多个过滤器的正确方法是什么 我使用的是log4j 1.2.17版本。如果第一个过滤器提供DENY或ACCEPT,则不会调用第二个过滤器 如果返回值是中性的,则调用第二个过滤器。 我不确定,但您可以在一个筛选器中使用正则表达式 我已经对此进行了广泛的研究,据我所知,该方法会

我正在尝试使用此配置筛选日志消息(我假装忽略包含文本
无法刷新目标的JMS连接的消息,以及包含
org.apache.activemq.transport.FailoverTransport的消息):

但只有第一个过滤器在工作。配置多个过滤器的正确方法是什么


我使用的是log4j 1.2.17版本。

如果第一个过滤器提供
DENY
ACCEPT
,则不会调用第二个过滤器

如果返回值是中性的,则调用第二个过滤器。 我不确定,但您可以在一个筛选器中使用正则表达式


我已经对此进行了广泛的研究,据我所知,该方法会随着时间的推移而有所变化,具体取决于您的版本。因此,我找到了三种方法,它们应该可以工作,但只有版本1适合我:

使用过滤器元件 这可能会在控制台中生成错误

org.ops4j.pax.logging.pax-logging-api [log4j2] ERROR : Filters contains invalid attributes "onMatch", "onMismatch" Ignored FQCN: org.apache.logging.log4j.spi.AbstractLogger
但这可以被安全地忽略

2直接在过滤器属性上使用类型属性和多个过滤器 根据源代码,这应该是可行的。

3使用上述文件记录的方法 这实际上是log4j文档中正式记录的方法:

在文档中,指定直接在过滤器ID上使用该名称,并具有完全限定的名称(从未在openHAB2中为我工作过)

需要注意的其他事项: 正则表达式过滤器的onMismatch名称已从onMismatch更改为onMismatch,错误消息实际上给出了错误消息(因此,如果键入onMismatch is,将抱怨键入错误的onMismatch,有趣的东西;-)

多个滤清器应返回空档,以便滤清器链继续工作。(最后一个筛选器可以是拒绝/接受)


过滤器按ID排序,这就是为什么将ID作为数字或单个字母比实际命名更容易阅读的原因。

找到解决方案了吗?没有,我没有:(
log4j2.appender.event.filter.1.type = Filters

log4j2.appender.event.filter.1.a.type = RegexFilter
log4j2.appender.event.filter.1.a.regex = .*(C_Radon_(Level|Updated|Running)|C_Solar_(PowerTotal|PowerEast|PowerWest|TotalYield|DailyYield)|OFFLINE.*10\.13\.0\.70).*
log4j2.appender.event.filter.1.a.onMatch = DENY
log4j2.appender.event.filter.1.a.onMismatch = NEUTRAL

log4j2.appender.event.filter.1.b.type = RegexFilter
log4j2.appender.event.filter.1.b.regex = .*(C_Air_).*
log4j2.appender.event.filter.1.b.onMatch = DENY
log4j2.appender.event.filter.1.b.onMismatch = NEUTRAL
org.ops4j.pax.logging.pax-logging-api [log4j2] ERROR : Filters contains invalid attributes "onMatch", "onMismatch" Ignored FQCN: org.apache.logging.log4j.spi.AbstractLogger
## Danfoss Air Updates (because the key is cair this will be the first filter)
log4j2.appender.event.filter.1.type = RegexFilter
log4j2.appender.event.filter.1.regex = .*(Solar_PowerTotal).*
log4j2.appender.event.filter.1.onMatch = DENY
log4j2.appender.event.filter.1.onMismatch = NEUTRAL

## Frequest updates
log4j2.appender.event.filter.2.type = RegexFilter
log4j2.appender.event.filter.2.regex = .*(C_Solar_PowerWest).*
log4j2.appender.event.filter.2.onMatch = DENY
log4j2.appender.event.filter.2.onMismatch = NEUTRAL
log4j2.appender.event.filter.1 = org.apache.logging.log4j.core.filter.RegexFilter
log4j2.appender.event.filter.1.regex = .*(C_Radon _(Level|Updated|Running)|C_Solar_(PowerTotal|PowerEast|PowerWest|TotalYield|DailyYield)|OFFLINE.*10\.13\.0\.70).*
log4j2.appender.event.filter.1.onMatch = DENY
log4j2.appender.event.filter.1.onMismatch = NEUTRAL

log4j2.appender.event.filter.2 = org.apache.logging.log4j.core.filter.RegexFilter
log4j2.appender.event.filter.2.regex = .*(C_Air_).*
log4j2.appender.event.filter.2.onMatch = DENY
log4j2.appender.event.filter.2.onMismatch = NEUTRAL