我试图用一些正则表达式解析应用程序日志。我能够解析时间戳。但在那之后,如果我尝试在流畅的格式中添加更多表达式,那么第一个属性" time"给我一个例外,消失了。没有记录匹配。
我正在使用Fluentular。
日志消息将类似于:
Date=[2018-04-11 08:44:30,219] Thread=[20] Level=[INFO] EventId=[2] Message=[Request finished in 1.1825ms 200 text/plain; charset=utf-8]
这是第一个带有第一个密钥的正则表达式(存在毫秒问题,但并不重要)。在属性中,我可以看到带有此值的关键时间。
然后如果我尝试在日志中隔离更多信息,我会丢失第一个密钥,而且我无法解析任何其他数据。
我做错了什么?
由于
更新:
基于评论现在我有这个表达
(?<time>\[(?<time>[^\]\[]+)])\s+(?<Thread>\S+)\s+(?<Level>\S+)\s+(?<EventId>\S+)\s+(?<Message>[^ ].*$)
几乎是完美的。唯一的问题是,表达式也得到方括号
关键线程 价值线程= [20]
我不知道是否可以改进此表达式以避免
&#34;螺纹= []&#34;
更新2:
为了进行测试,我通过apt安装了流畅的插件并进行了一些测试,我的最终设置就像
<parse>
@type kv
time_key Date
types Date:time:%Y-%m-%d %H:%M:%S,Thread:integer,Level:string,EventId:integer,Message:string
kv_delimiter /\]\s+/
kv_char "=["
现在看起来更好:
2018-04-11 08:44:30.219000000 +0200 kv_log: {"Thread":20,"Level":"INFO","EventId":2,"Message":"Request finished in 1.1825ms 200 text/plain; charset=utf-8]"}
答案 0 :(得分:1)
我建议使用Key-Value Pairs Parser Plugin for Fluentd解析键值对。
<强>参数强>
kv_delimiter /\]\s+(?=\w+=)/
(或仅/\]\s+/
)(请参阅how the kvp pairs are split here)kv_char "=["
(该字符串将用于从键中拆分键)