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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:16:52