我正在阅读rsyslog
的{{3}}以找到更好的属性,我偶然发现了这个:
spifno1stsp - expert options for RFC3164 template processing
但是,正如您所看到的,文档非常模糊。而且,我无法在任何地方找到更长的解释。谷歌发现的唯一提及内容总是大致相同的片段或相同的简短描述。
事实上,没有解释这个属性:
就像大家一样复制&在这里和那里粘贴相同的片段,但很难理解它实际上在做什么。
有什么想法吗?
答案 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
(标准模板选项)。
希望有所帮助。