Fluentd 日志源格式 RegEX

kmk*_*amy 5 regex fluentd

我有这种格式的日志:

2015-02-25 18:33:06,975 INFO c.a.p.c.b.s.Monitor akka://application/user/daemons/monitor : 91 active threads, 4175691776 bytes used
Run Code Online (Sandbox Code Playgroud)

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

(?<time>[^ ]* [^ ]*) (?<method>[^ ]*) (?<path>[^ ]*) (?<message>[^ ].*$)
Run Code Online (Sandbox Code Playgroud)

当我在Fluentular 中测试时 (我将使用它作为 fluentd 日志输入的格式)我得到以下字段:

time  =>    2015/02/25 18:33:06 +0000
method  =>    INFO
PATH    =>  <empty>
message => c.a.p.c.b.s.Monitor akka://application/user/daemons/monitor : 91 active threads, 4175691776 bytes used
Run Code Online (Sandbox Code Playgroud)

我无法打破消息字符串。我希望匹配的组是:

time  =>    2015/02/25 18:33:06 +0000
method  =>    INFO
PATH  =>    c.a.p.c.b.s.Monitor
message =>    akka://application/user/daemons/monitor : 91 active threads, 4175691776 bytes used
Run Code Online (Sandbox Code Playgroud)

什么是合适的正则表达式

lin*_*des 5

问题是输入字符串之间INFOc.a.p.c.b.s.Monitor中存在两个空格。添加 a+以允许在该位置有一个或多个空格,您将获得:

(?<time>[^ ]* [^ ]*) (?<method>[^ ]*) +(?<path>[^ ]*) (?<message>[^ ].*$)
Run Code Online (Sandbox Code Playgroud)

您可能想也可能不想将它们添加到其余组件中,例如:

(?<time>[^ ]* [^ ]*) +(?<method>[^ ]*) +(?<path>[^ ]*) +(?<message>[^ ].*$)
Run Code Online (Sandbox Code Playgroud)