2015-02-25 5 views
2

У меня есть журналы этого формата: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 

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

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 

Что бы надлежащим REGEX

ответ

1

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

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

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

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