ログ ファイルの解析に役立つプロセスを作成しました。ログ ファイルは、文字列タグでタグ付けする必要があります。レコードがこの文字列タグを提供できるわけではないので、各ログ イベントで何らかの状態を維持して、各イベントにタグが付くようにする必要があります。イベントにタグがない場合は、最後に見つかったタグを使用したいと考えています。これにより、以下のようなログを解析し、メッセージ行が 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)
}
これは、スキャン/フォールドで表現する必要があるように感じますが、機能させることができませんでした。これをスキャン/フォールドとして書き換えることはできますか?