Fluentd不解析日志的最后一行

时间:2019-05-21 05:32:01

标签: java logging fluentd

我当前正在设置efk堆栈来解析我的Java日志(log4j)。我能够解析除日志的最后一行以外的所有日志。所以例如

2019-05-17 07:19:35,708 WARN log-line-1

2019-05-17 07:19:35,708 WARN log-line-2

因此将解析log-line-1,但不会解析log-line-2。否则我就能解析所有内容。

我已经测试了我的正则表达式(https://rubular.com/),并且工作正常。

以下是fluentd的配置:

format multiline

format_firstline /\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2},\d{3}/

format1 /(?<logtime>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2},\d{3})[\s](?<LEVEL>[A-Z]+)(?<message>(?=([\w\W\s]*?\d{4}-\d{2}-\d{2}[\s]*\d{2}:\d{2}:\d{2}\,\d{3}))([\w\W\s]*?)(?=(\d{4}-\d{2}-\d{2}[\s]*\d{2}:\d{2}:\d{2}\,\d{3}))|((.|\s)*))/

@type tail

time_key logtime

1 个答案:

答案 0 :(得分:0)

我有同样的错误, 我不知道这是否可以帮助您,但对我有用。

td-agent.conf:

    ...
    @type tail
    format multiline
    format_firstline  /^\d{4}-\d{1,2}-\d{1,2}.\d{1,2}:\d{1,2}:\d{1,2},\d{3} (?<type>[A-Z]+) (?<message>.*\n.*)/
    format1 /^\d{4}-\d{1,2}-\d{1,2}.\d{1,2}:\d{1,2}:\d{1,2},\d{3} (?<type>[A-Z]+) (?<message>.*\n.*)/
    ...

我认为(?<message>.*\n.*)会有所帮助,因为其中包含多个/n,包括  之后的所有行。

尝试here

希望有帮助。