我正在构建一个火花流媒体应用程序,它接收来自服务器的日志。日志行看起来像这样。
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;在典型的日志行中配对。
我不太明白该模式的含义以及如何更改它以适合我的应用。我需要根据日志中的源和类型键对时间进行一些聚合
答案 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。