0

我正在尝试为应用程序生成的日志文件编写 Grok 模式。我无法过滤掉几个字段。输入日志文件

2019-05-02 05:32:41,017 INFO [some_class_name] Property: MatchResult(id=null, symbol=BTC_ETH, a=13172871, b=11372687136, c=1111, d=2222, e=139128979137, f=138713871, number=1.00000000000000000000, price=0.0423000, g=1, h=1, i=0.000100000000000000000000, j=0.000004525972500000000000000000000000000000000, createTime=Thu May 02 05:32:41 UTC 2019)
2019-05-02 11:06:46,356 INFO [Some_class_name] property:  User uid:2 Login ip:127.0.0.1

这两行都将在同一个日志文件中。我需要过滤掉其中的每个字段。前任:

%{DATESTAMP:date} %{LOGLEVEL:log} \[%{DATA:class}\] %{NOTSPACE:Property}\: %{SPACE} %{NOTSPACE:user} %{WORD:uid}

我已经尝试过这种模式,在 uid 之后(对于日志文件的第二行,我无法获得数字,即 uid:2)同样,对于第一行,我做了直到 Property: MatchResult,在 '(' 之后,我不能获取单独的字段。我是第一次这样做。如果需要更多信息,请告诉我。谢谢

4

1 回答 1

1

试试这个:

%{DATESTAMP:date} %{LOGLEVEL:log} \[%{DATA:class}\] [P|p]roperty\: (%{NOTSPACE:property}\(%{GREEDYDATA:arguments}\))?( User%{SPACE}(%{NOTSPACE:user})?%{SPACE}uid\:%{WORD:uid} Login ip\:%{IP:ip})?

在 Elasticsearch 6.7 中测试

于 2019-05-02T17:51:25.177 回答