如何在scala中解析自定义日志文件以使用模式提取一些键值对

时间:2015-06-19 22:41:19

标签: java regex scala apache-spark

我正在构建一个火花流媒体应用程序,它接收来自服务器的日志。日志行看起来像这样。

2015-06-18T13:53:46.606-0400 CustomLog v4 INFO: source="ABCD" type="type1"  <xml some xml here attr1='value1' attr2='value2' > </xml> <some more xml></> time ="232"

我正在尝试关注数据库在此处here编写的示例应用。

我有点困在ApacheAccessLog.scala中的模式。我的日志是一个自定义日志,并且具有此键=&#34;值&#34;在典型的日志行中配对。

我不太明白该模式的含义以及如何更改它以适合我的应用。我需要根据日志中的源和类型键对时间进行一些聚合

1 个答案:

答案 0 :(得分:0)

case类需要你的日志显然不具备IP地址等各种内容,因此你需要修改case类定义以仅包含你想要添加的字段。

这里只是为了说明,让我们像这样制作案例类:

case class ApacheAccessLog(source: String, type: String, time: Long)

然后你可以用找到那些的正则表达式替换正则表达式,你可以在regex101上使用正则表达式,我已经为你准备了一些东西,这样就产生了这样的正则表达式:

source="(.*?)" type="(.*?)" .* time ="(.*?)"

将三组字符捕获到m中。然后,您可以使用这些组修复实例化:

ApacheAccessLog(m.group(1), m.group(2), m.group(3).toLong)

HTH。