配置Log4j2 MarkerFilter时onMismatch属性报错,与文档矛盾求解答
解决Log4j2 MarkerFilter配置中onMismatch属性无效的问题
我来帮你排查这个问题,主要有两个可能的原因:
Log4j2版本不兼容
onMismatch属性是在Log4j 2.8版本才新增到MarkerFilter中的。从你报错的时间(2018年)来看,很可能你使用的是2.8之前的版本(比如2.7或更早),这些版本的MarkerFilter根本没有这个属性,所以配置后会报错。
解决办法:检查你的项目依赖,把Log4j2的核心、API等依赖都升级到2.8及以上版本。Marker值的多余引号
看你的配置行filter.muteHeartbeatEvent.marker ="Heartbeat_Event",这里的双引号是多余的!在properties文件中,字符串类型的值不需要用引号包裹,加上引号后,实际匹配的marker名称会变成"Heartbeat_Event"(包含引号本身),这会导致过滤器无法正确识别你代码里的Heartbeat_Event标记。
修正后的配置应该去掉引号:filter.muteHeartbeatEvent.marker = Heartbeat_Event
修正后的完整配置示例
filter.muteHeartbeatEvent.type = MarkerFilter filter.muteHeartbeatEvent.marker = Heartbeat_Event filter.muteHeartbeatEvent.onMatch = DENY filter.muteHeartbeatEvent.onMismatch = NEUTRAL
如果暂时无法升级Log4j2版本,你可以直接删掉onMismatch这一行——因为在2.8之前的版本中,MarkerFilter的onMismatch默认行为就是NEUTRAL,和你配置的效果一致,这样也能避免报错:
filter.muteHeartbeatEvent.type = MarkerFilter filter.muteHeartbeatEvent.marker = Heartbeat_Event filter.muteHeartbeatEvent.onMatch = DENY
内容的提问来源于stack exchange,提问作者Kilian
相关产品推荐
相关产品推荐

