Fluentd正则匹配失败时输出完整原始消息的实现方案
问题原因
原配置的正则提取逻辑未做空值兜底:scan方法在无匹配场景下返回空数组,调用.first取值为nil,最终导致MESSAGE字段输出空。
调整后完整配置
<filter docker> @type record_transformer enable_ruby true <record> MESSAGE ${matched = record["MESSAGE"]&.match(/:\ (.*+)$/); matched ? matched[1] : record["MESSAGE"]} </record> </filter>
逻辑说明
- 正则保持原有写法不变,匹配成功时返回捕获组1对应的片段(即冒号+空格后的内容),和原有场景1的输出效果完全一致。
- 正则匹配失败时,直接返回原始MESSAGE字段值,满足场景2的输出要求。
- 新增
&.安全导航操作符,可避免MESSAGE字段本身为nil时抛出语法错误。
内容的提问来源于stack exchange,提问作者developer sw
相关产品推荐
相关产品推荐

