系统日志模板中的正则表达式

Posted

技术标签:

【中文标题】系统日志模板中的正则表达式【英文标题】:Regex in syslog template 【发布时间】:2018-05-17 09:56:32 【问题描述】:

我尝试在系统日志模板中使用正则表达式,但它仍然不起作用。我首先尝试做匹配一切以查看它是否有效,但它不起作用。我用一个在线工具测试了我的表达,它在那里工作。在我看来,日志消息应该是空的,因为表达式总是匹配 or?但是日志文件中总是有零。

template(name="testLogFormat" type="list")
   property(name="syslogtag"
            regex.type="ERE"
            regex.submatch="0"
            regex.expression=".*--end"
            regex.nomatchmode="ZERO"
)

【问题讨论】:

它应该如何工作?什么是样本输入,什么是预期输出?您当前的正则表达式没有找到任何匹配项,regex.nomatchmode="ZERO" 设置输出0s。如果您想在不匹配时使用空白,请使用 regex.nomatchmode="BLANK" 我有一个字符串 abc[123],我想在括号内获取术语,或者如果它为空,我想要 0。使用 .* 我匹配每个字符或?! 试试regex.expression="\[([0-9]+)]"regex.submatch="1" 谢谢,但我之前试过这个,当我用这个模板重新启动系统日志时出现错误。 “syslogd:运行失败,错误 -2207” syslog 版本 7.4.7。 您是否像%msg:R,ERE,1,ZERO:\[([0-9]+)]--end%一样添加它? Rsyuslog.com 说:“如何在 rsyslog.conf 中使用这个表达式的一个非常简单的例子如下:$Template tpl,"%msg:R,ERE,1,ZERO:\[([0-9]+)]--end%\n" *.* /path/to/file;tpl 【参考方案1】:

您的输入字符串看起来像abc[123]。因此,您可以使用

修复您当前的配置
regex.submatch="1"
regex.expression="\[([0-9]+)]"

请参阅regex demo。

这里,

\[ - 匹配 [ ([0-9]+) - 捕获到第 1 组(您使用 regex.submatch="1" 访问值) ] - 结束]

【讨论】:

以上是关于系统日志模板中的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统开发: linux下正则表达式

模板文字中的正则表达式。转义字符

正则表达式清理日志

正则表达式中的插入操作

你可以在 Django 模板条件中使用正则表达式吗?

正则表达式在数据科学中的使用模板