Я заметил, что вы используете format="jsonr"
в шаблоне для сообщения.Существует разница, если вы используете json
вместо jsonr
, что очень кратко описано в документации, так как позволяет избежать двойного экранирования значения .Использование шаблона с
constant(value="\",\n\"json\":\"") property(name="rawmsg" format="json")
constant(value="\",\n\"jsonr\":\"") property(name="rawmsg" format="jsonr")
и предоставление ввода, содержащего
LOCAL\ususer "abc"
, приводит к получению 2 строк
"json":"LOCAL\\ususer \"abc\",
"jsonr":"LOCAL\ususer \"abc\",
, в которых формат json
вышел за пределы \u
в \\u
(протестировано с rsyslog-8.27.0).Если вам это не подходит, вы всегда можете манипулировать сообщением, например, следующим образом, добавив перед действием:
set $.msg2 = replace($rawmsg, "\\u", "\\\\u");
и в своем шаблоне используйте
constant(value="\",\"message\":\"") property(name="$.msg2" format="jsonr")
ЗаменитьФункция выполняет глобальную замену, поэтому вы можете захотеть ограничить ее, например,
set $.msg2 = replace($rawmsg, "LOCAL\\u", "LOCAL\\\\u");