1

我创建了一个流程来帮助我解析日志文件。日志文件需要使用字符串标签进行标记。从来没有记录可以提供这个字符串标签,所以我需要在每个日志事件中维护一些状态,以便每个事件都有一个标签。如果事件缺少标签,我想使用找到的最后一个标签。这使我能够解析如下所示的日志并具有与消息行关联的“标签”,即使它们是 eventindex04 记录标头的一部分。我可以将事件包装在一个信封中并在信封中包含逻辑,但是我到处都有一个看起来很重的信封。

eventindex01 start log ...
eventindex02 time ...
eventindex03 user ...
eventindex04 message
  message1
  message2
eventindex05 start log ...

我把这个工作正常的过程放在一起:

def extractStatefulAttribute[T, D](first: T)(getTag: D => Option[T]):
  Process1[D, (T, D)] = {
    def go(lastTag: T): Process1[D, (T, D)] = {
      Process.receive1[D, (T, D)] {
        event: D =>
          val tag = getTag(event) getOrElse lastTag
          Process.emit((tag, event)) ++ go(tag)
      }
    }
   go(first)
}

这感觉应该表示为扫描/折叠,但我无法使其工作。这可以重写为扫描/折叠吗?

4

0 回答 0