转发带有结构化数据的消息时转换 rsyslog 消息格式

convert rsyslog message format when forwarding messages with structured-data

我的守护进程使用 libc syslog() 调用以 RSYSLOG_TraditionalFileFormat 格式记录消息。并且,同一主机上的 rsyslogd 守护进程 运行 需要将所有这些消息以 RSYSLOG_SyslogProtocol23Format 格式转发到远程日志收集器。

现在我想 "piggy back" %STRUCTURED-DATA%RSYSLOG_TraditionalFileFormat 格式(基本上当我的守护程序调用 syslog() 时,它会在方括号中指定结构化数据)。 如何在 rsyslog.conf 中指定传入的日志消息格式(或模板)以便它理解结构化数据?

我知道解决方案之一是让我的守护程序直接向 /dev/log 发送消息并更改 rsyslog.conf 中的默认日志消息格式。但是,这似乎不对,因为我想保持本地日志格式不变。

似乎无法优雅地解决这个问题,因为 libc syslog() 调用使用 /dev/log UNIX 域套接字。

rsyslog 8.8 及更早版本对通过 UNIX 域套接字接收的消息使用硬编码消息解析器。请参阅 usespecialparser 设置 (http://www.rsyslog.com/doc/v8-stable/configuration/modules/imuxsock.html)

使它与 rsyslog 7.4 附带的最新 Ubuntu 15.04 一起使用的另一个选项是使用 UDP 套接字,但我不能再使用 libc syslog()