【问题标题】:Fluentd source log format regexFluentd 源日志格式正则表达式
【发布时间】:2017-02-27 13:18:04
【问题描述】:

美好的一天! 我有这种格式的日志:

[14-10-2016 00:00:04,004  INFO WebService:1603] [172.16.1.10] [0000077000013] [ID=N0000077000013] [N=147639237688] REQUEST getStatus

我想出了这个正则表达式:

 /(?<time>\d{1,2}-\d{1,2}-\d{4} \d{1,2}:\d{1,2}:\d{1,2},\d{3}) (?<message1>[=]+) .(?<ID>ID=\w*) .(?<N>N=\w*) (?<messages>.*)/

我想识别日期、从 INFO 到 ID=、ID、N 和最后一部分的部分,但 fluentd 返回“模式不匹配”​​。正则表达式的每个部分都在流利的正则表达式测试站点上单独工作。

什么是正则表达式? 谢谢。

【问题讨论】:

  • 试试(?&lt;time&gt;\d{1,2}-\d{1,2}-\d{4} +\d{1,2}:\d{1,2}:\d{1,2},\d{3}) +(?&lt;message1&gt;[A-Z]+) .*\[ID=(?&lt;ID&gt;\w+)] +\[N=(?&lt;N&gt;\w+)] (?&lt;messages&gt;.*)
  • 谢谢 Wiktor,它正在工作。

标签: regex fluent


【解决方案1】:

你可以使用

(?<time>\d{1,2}-\d{1,2}-\d{4} +\d{1,2}:\d{1,2}:\d{1,2},\d{3}) +(?<message1>[A-Z]+) .*\[ID=(?<ID>\w+)] +\[N=(?<N>\w+)] (?<messages>.*)

regex demo

请注意,我在空格后添加了 + 以匹配 1 次或多次出现,并调整了 IDN 组的组边界。

此外,您的 message1 组模式 [=]+ 匹配 1+ = 符号,而您有 INFO 字符串。我将其更改为 [A-Z]+ 以匹配 1 个或多个大写 ASCII 字母。

最后,由于 message1ID 组之间存在文本,因此您需要确保使用这些字符,因此,我使用了 .*(除换行符之外的任何 0+ 字符)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多