繁体   English   中英

正则表达式与流利的解析日志

[英]Regexp for parse log with fluentd

我正在尝试使用一些正则表达式解析应用程序日志。 我能够解析时间戳。 但是在那之后,如果我尝试将更多的表达式添加到流畅的格式中,第一个属性“时间”将消失,并给我一个例外。 没有匹配的记录。

我正在使用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>[^ ].*$)

正则表达式3

几乎是完美的。 唯一的问题是,表达式也得到方括号

关键线程值Thread = [20]

我不知道是否可以改进此表达式以避免

“线程= []”

更新2:

为了进行测试,我使用插件通过apt安装了fluentd并进行了一些测试,最终的设置是

<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]"}

我建议使用Fluentd的键值对解析器插件解析键值对。

参数

  • kv_delimiter /\\]\\s+(?=\\w+=)/ (或仅/\\]\\s+/ )(请参阅此处如何拆分kvp对
  • kv_char "=[" (该字符串将用于从值中拆分键)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM