JBoss 8日志子系统Filter Expressions匹配异常问题排查
JBoss EAP 7.4日志match过滤异常栈不生效的原因及解决办法
核心原因
你用的match(".+?ArithmeticException.+?")默认只匹配日志的消息文本,而ArithmeticException的栈轨迹属于日志的Throwable(异常)附加信息,不在默认匹配范围内,所以表达式永远匹配失败,导致:
- 直接用
match(...)时,匹配返回false,日志被过滤不显示 - 用
not(match(...))时,取反后返回true,日志正常显示
正确配置方式
要匹配异常栈信息,需要明确指定匹配throwable部分,语法如下:
如果要排除包含ArithmeticException栈信息的日志,使用:
<filter-spec value="not(match(throwable(".+ArithmeticException.+")))"/>
如果是要仅保留包含该异常的日志,则用:
<filter-spec value="match(throwable(".+ArithmeticException.+"))"/>
额外说明
- 正则表达式里的
+?非贪婪匹配在这里没必要,直接用+贪婪匹配足够覆盖栈中的异常字符串 - 测试时匹配不存在的
abc也不显示,是因为你的日志消息体里确实没有abc,所以match返回false,符合预期
内容的提问来源于stack exchange,提问作者user1169587
相关产品推荐
相关产品推荐

