Evg*_*eny 5 escaping json rsyslog
我希望 rsyslog 以 JSON 格式编写日志消息,这需要在字符串周围使用双引号 (")。
问题是有时值本身包含双引号,并且需要转义这些值 - 但我不知道如何做到这一点。
目前我的 rsyslog.conf 包含我使用的这种格式(有点简化):
$template JsonFormat,"{\"msg\":\"%msg%\",\"app-name\":\"%app-name%\"}\n",sql
Run Code Online (Sandbox Code Playgroud)
但是当一个包含双引号的 msg 到达时,JSON 就会被破坏,例如:
user pid=21214 uid=0 auid=4294967295 msg='PAM setcred:
user="oracle" exe="/bin/su" (hostname=?, addr=?, terminal=?
result=Success)'
Run Code Online (Sandbox Code Playgroud)
变成:
{"msg":"user pid=21214 uid=0 auid=4294967295 msg='PAM setcred:
user="oracle" exe="/bin/su" (hostname=?, addr=?, terminal=?
result=Success)'","app-name":"user"}
Run Code Online (Sandbox Code Playgroud)
但我需要它成为:
{"msg":"user pid=21214 uid=0 auid=4294967295 msg='PAM setcred:
user=\"oracle\" exe=\"/bin/su\" (hostname=?, addr=?, terminal=?
result=Success)'","app-name":"user"}
Run Code Online (Sandbox Code Playgroud)
从 rsyslog 4.6.2 开始,您似乎可以只使用jsonproperty 选项:
$template JsonFormat,"{\"msg\":\"%msg:::json%\",\"app-name:::json\":\"%app-name:::json%\"}\n",sql
Run Code Online (Sandbox Code Playgroud)
请参阅此处了解更多详细信息。
| 归档时间: |
|
| 查看次数: |
5073 次 |
| 最近记录: |