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