rsyslog:在模板中使用消息属性

我使用日志logging驱动程序运行Docker,并且使用rsyslog(v8.29.0)来收集这些消息,并将它们写入使用容器信息注释的文件。 我遇到的问题是,我无法使用$!中的消息属性 命名空间模板除非我第一次移动到例如本地$. 命名空间。

我从这个configuration开始:

 module(load="imjournal" StateFile="imjournal.state") template(name="ContainerTemplate" type="list") { property(name="timereported" dateFormat="rfc3339" caseConversion="lower") constant(value=" ") property(name="$!CONTAINER_NAME") constant(value=" ") property(name="$!CONTAINER_ID") constant(value=" ") property(name="msg") constant(value="\n") } if (strlen($!CONTAINER_NAME) > 0) then { action(type="omfile" file="/var/log/containers.log" template="ContainerTemplate") } 

即使定义了$!CONTAINER_NAME$!CONTAINER_ID ,它们也会在生成的模板中展开为空string。 我可以像这样解决它,通过使用现有属性的值显式设置新的属性:

 template(name="ContainerTemplate" type="list") { property(name="timereported" dateFormat="rfc3339" caseConversion="lower") constant(value=" ") property(name="$.container_name") constant(value=" ") property(name="$.container_id") constant(value=" ") property(name="msg") constant(value="\n") } if (strlen($!CONTAINER_NAME) > 0) then { set $.container_name = $!CONTAINER_NAME; set $.container_id = $!CONTAINER_ID; action(type="omfile" file="/var/log/containers.log" template="ContainerTemplate") } 

这工作正常…但是,如果我更改大小写的局部variables(即,如果我使用$.CONTAINER_NAME$.CONTAINER_ID而不是小写等价物),它的行为与原始configuration相同(我得到在日志中的空string,即使我明确设置属性)。

你知道这里发生了什么吗? 根据文件 , property声明“可以访问所有属性”,所以我很困惑。