Rsyslog配置Tomcat异常日志聚合失败,正则语法报错求助
Rsyslog配置修复:Tomcat异常日志整合与正则语法错误解决
问题根源解析
- 正则匹配语法错误:你的rsyslog版本(8.2102.0-5.el8)中,条件判断的正则匹配操作符应为
matches,而非regex,这是配置验证报错的直接原因。 - 多行日志未整合:默认imfile模块逐行读取日志,导致
$msg仅包含单行内容,无法匹配多行异常栈的正则表达式,这也是过滤规则失效的核心原因。
修复步骤与配置示例
1. 配置imfile整合多行异常日志
通过multiLineStartRegex定义异常日志的起始行,multiLineEndRegex定义结束行,让rsyslog将整个异常栈合并为单条消息。
2. 修正正则匹配语法
将regex替换为rsyslog支持的matches操作符,并调整正则表达式适配合并后的多行消息。
最终修正后的配置
module(load="imfile" PollingInterval="10") # 仅需加载一次 # 配置imfile整合多行Tomcat异常日志 input(type="imfile" File="/tomcat/logs/catalina.out" Tag="catalina" Severity="info" Facility="local1" multiLineStartRegex="^org\.apache\.jasper\.JasperException:" multiLineEndRegex="^\.\.\. \d+ more$" ) # 过滤JasperException+NullPointerException的异常栈并转发 if $msg matches "(?s)org\.apache\.jasper\.JasperException:.*?Caused by: java\.lang\.NullPointerException.*" then { action(type="omfwd" target="192.168.0.1" port="514" protocol="tcp" facility="local1" severity="err" ) } # 转发其余local1设施的日志 local1.* @192.168.0.1:514
关键说明
multiLineStartRegex="^org\.apache\.jasper\.JasperException:":匹配异常栈的起始行,触发多行合并。multiLineEndRegex="^\.\.\. \d+ more$":匹配异常栈的结尾行(如... 40 more),结束多行合并。(?s):正则的DOTALL模式,让.匹配包括换行符在内的所有字符,确保能匹配多行内容。- 替换
regex为matches:符合rsyslog v8.x版本的条件判断语法规范,解决配置验证报错。
内容的提问来源于stack exchange,提问作者John Paul Attard
相关产品推荐
相关产品推荐

