Исходный формат журнала Fluentd RegEX

У меня есть логи такого формата:

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

Я подошел к этому регулярному выражению:

(?<time>[^ ]* [^ ]*) (?<method>[^ ]*) (?<path>[^ ]*) (?<message>[^ ].*$)

Когда я тестирую в 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

Я не могу разорвать строку сообщения. Я бы хотел, чтобы совпадающие группы были:

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

Что было бы правильным регулярным выражением


person kmkswamy    schedule 25.02.2015    source источник


Ответы (1)


Проблема в том, что в строке ввода есть два пробела между INFO и c.a.p.c.b.s.Monitor. Добавив +, чтобы разрешить один или несколько пробелов в этой позиции, вы получите:

(?<time>[^ ]* [^ ]*) (?<method>[^ ]*) +(?<path>[^ ]*) (?<message>[^ ].*$)

Вы можете или не хотите добавлять их к остальным компонентам, например:

(?<time>[^ ]* [^ ]*) +(?<method>[^ ]*) +(?<path>[^ ]*) +(?<message>[^ ].*$)
person lindes    schedule 25.02.2015