我创建了一个帮助我解析日志文件的进程。日志文件需要使用字符串标记进行标记。从来没有记录可以提供这个字符串标记,所以我需要在每个日志事件中保持一些状态,以便每个事件都有一个标记。如果某个事件缺少标记,我想使用找到的最后一个标记。这允许我解析下面的日志,并有一个"标签"与消息行相关联,即使它们是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)
}
这感觉它应该表示为扫描/折叠,但我无法使其工作。这可以重写为扫描/折叠吗?