【问题标题】: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

标签: regex syslog


【解决方案1】:

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

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

请参阅regex demo

这里,

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多