什么是spifno1stsp真正作为rsyslog属性做什么?

时间:2018-06-15 19:02:20

标签: rsyslog

我正在阅读rsyslog的{​​{3}}以找到更好的属性,我偶然发现了这个:

spifno1stsp - expert options for RFC3164 template processing

但是,正如您所看到的,文档非常模糊。而且,我无法在任何地方找到更长的解释。谷歌发现的唯一提及内容总是大致相同的片段或相同的简短描述。

事实上,没有解释这个属性:

就像大家一样复制&在这里和那里粘贴相同的片段,但很难理解它实际上在做什么。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

将其视为if语句。如果有空间,请不要做任何事情。否则,如果空格,则添加空格。

确保只在输出中添加一个空格(通常在两个字符串之间)非常有用。

对于任何此类情况,您可以找到可以改进文档的位置,请随时在官方GitHub rsyslog documentation project中提出澄清请求的问题。文档团队人员不足,但团队成员将尽可能提供帮助。

如果您正在寻求一般帮助,rsyslog-users mailing list也是一个很好的资源。多年来,我通过浏览档案和阅读先前的线程,学到了很多东西。

返回有关spifno1stsp选项的问题:

虽然您会在该选项上获得一些点击,但您可能会发现更多结果是搜索旧的字符串模板选项sp-if-no-1st-sp。以下是您链接到的文档页面中使用它的示例:

template(name="forwardFormat" type="string"
         string="<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%"
        )

以下是与此相关的具体部分:

`%msg:::sp-if-no-1st-sp%%msg%`

来自Property Replacer文档:

  

SP-如果-NO-第一-SP

     

此选项看起来很可怕,用户可能不应该使用该选项。对于   给定的任何字段,它返回单个空格字符或否   性格。永远不会返回字段内容。返回一个空格   if(且仅当)字段内容的第一个字符不是a   空间。此选项是解决根植于RFC的问题的一种方法   3164:3164指定syslog标记序列和之间没有分隔符   实际的消息文本。几乎所有的实现实际上都划定了   两个空间。从RFC 3164开始,此空间是消息文本的一部分   本身。这在构建消息时会导致问题(例如,何时   写入磁盘或转发)。是否应包括划界空间   如果消息不以一个开头?如果没有,标签立即生效   然后是另一个非空格字符,可以导致一些日志   解析器误解了标签是什么以及消息是什么。该   当klog模块重组时,问题最终浮出水面   标签写得正确。它也存在于其他消息源中。该   解决方案是引入这种特殊的属性替代品   选项。现在,默认模板可以包含条件空间,   仅当消息不以一个消息开头时才存在。虽然这个   没有解决所有问题,它应该在远处工作得很好   大多数情况。如果您阅读本文并且不知道是什么   它正在谈论 - 放松:这是一个很好的迹象,你永远不会   需要这个选项。简单地忘掉它;)

简而言之,sp-if-no-1st-sp(字符串模板选项)类似于spifno1stsp(标准模板选项)。

希望有所帮助。