如何在syslog-ng.conf中替换$MSG内的双引号为单引号?
在syslog-ng中替换$MSG里的双引号为单引号
当然可以实现这个需求!syslog-ng内置了subst()字符串处理函数,专门用来做文本替换操作,刚好能帮你解决$MSG字段中双引号干扰JSON格式的问题。
修改后的模板配置
你只需要把原模板里的$MSG替换成subst("\"", "'", $MSG)即可——注意配置里的双引号需要用反斜杠转义,避免和模板本身的双引号冲突。完整的模板配置如下:
template t_noHeader { template("{\"time\":\"$DATE\",\"logLevel\":\"$LEVEL\",\"log\":[\"$PROGRAM\",\""subst("\"", "'", $MSG)"\"]} "); template_escape(no); };
函数参数说明
subst()函数的三个参数作用分别是:
- 第一个参数:要被替换的目标字符串(这里是转义后的双引号
\") - 第二个参数:用来替换的新字符串(这里是单引号
') - 第三个参数:可选,替换次数,默认值
0表示全局替换所有匹配的内容
效果验证
假设你的$MSG原始内容是User "admin" logged in successfully,经过替换后会变成User 'admin' logged in successfully,最终生成的JSON日志就不会因为双引号嵌套出现格式错误了。
内容的提问来源于stack exchange,提问作者prattom
相关产品推荐
相关产品推荐

