You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

rsyslog模板正则表达式编译失败,求排查解决方法

解决方案

核心问题是你使用了PCRE风格的非捕获组语法(?:...),但当前配置指定regex.type="ERE",rsyslog会使用POSIX扩展正则表达式,而POSIX ERE标准中并不支持非捕获组,这直接导致正则编译失败。

有两种简单的解决方式:

方式1:改用POSIX ERE兼容的语法

将非捕获组改为普通捕获组,然后把regex.submatch的值从1改为2(第一个捕获组会匹配[Info ]或[Error ]部分,第二个捕获组才是我们需要提取的日志内容)。

修改后的模板配置:

template(name="jsonFormat" type="list" option.jsonf="on") {                 
    property(outname="msg" name="msg" regex.expression="(\[Info\s*\]|\[Error\s*\])\s*(.*)" regex.type="ERE" regex.submatch="2" format="jsonf")
}

方式2:切换为PCRE正则类型(需rsyslog支持)

如果你的rsyslog编译时已支持PCRE(或PCRE2),可以将regex.type改为PCRE,同时确保加载了对应的模块(比如module(load="pcre2"),具体模块名取决于rsyslog版本),这样就能直接使用原来的非捕获组正则:

module(load="imfile")
module(load="pcre2") # 加载PCRE2模块,旧版本可能是pcre

input(type="imfile" tag="mylog" file="/path/to/log/file.log")
    
template(name="jsonFormat" type="list" option.jsonf="on") {                 
    property(outname="msg" name="msg" regex.expression="(?:\\[Info\\s*\\]|\\[Error\\s*\\])\\s*(.*)" regex.type="PCRE" regex.submatch="1" format="jsonf")
}

if ($syslogtag == "mylog") then {
        action(type="omfile" file="/path/to/output/file.log" template="jsonFormat")
}

内容的提问来源于stack exchange,提问作者Florian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 13:23:17