我当前正在设置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
答案 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。
希望有帮助。