5

次の形式のログがあります。

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

適切な正規表現は何でしょうか

4

1 に答える 1

5

問題は、入力文字列INFOとの間に 2 つのスペースがあることです。c.a.p.c.b.s.Monitorその位置に 1 つ以上のスペースを許可するためにa を追加する+と、次のようになります。

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

次のように、それらを残りのコンポーネントに追加したい場合としない場合があります。

(?<time>[^ ]* [^ ]*) +(?<method>[^ ]*) +(?<path>[^ ]*) +(?<message>[^ ].*$)
于 2015-02-25T22:11:25.683 に答える