如何编写DRY风格的rsyslog规则?能否通过引用规则实现?
在rsyslog与liblognorm中实现DRY风格的规则引用
可以通过规则引用实现DRY(Don't Repeat Yourself)风格的规则编写,liblognorm原生支持规则复用的语法,不需要重复编写相同的字段匹配逻辑。
具体实现方式
liblognorm使用%:ref=<规则名>%语法来引用已定义的规则,注意被引用的规则必须先于引用它的规则定义。
修改后的规则示例
先定义被复用的innerQuery规则:
rule=innerQuery:%timestamp:date-rfc5424% %queryid:number% %client:ipv4%/%clientport:number% %querytype:word% %domain:word% %additionalinfo:rest%
再定义wrapperQuery规则,直接引用innerQuery的匹配逻辑:
rule=wrapperQuery:%mts:date-rfc5424% %mh:char-to: % [%mt:char-to:]%] %:ref=innerQuery%
这种引用方式会把innerQuery的字段匹配逻辑完整嵌入到wrapperQuery中,效果和直接复制字段定义完全一致,同时实现了逻辑复用,符合DRY原则。
注意事项
- 被引用的规则必须提前定义,否则liblognorm会无法识别引用
- 不需要自定义
REFERENCE_前缀,直接使用:ref关键字即可完成引用
内容的提问来源于stack exchange,提问作者weshouman
相关产品推荐
相关产品推荐

