0

いくつかのコンテキスト

文字列/データの連続ストリームが供給されるアプリケーションを作成しています。データはログメッセージですが、さまざまなマシンやさまざまなアプリケーションからのものです。そのため、それらの形式はわずかに異なる場合があります。

私の目的は、各メッセージから個々のコンポーネントを取得し、ソースに関係なく、ホスト、スレッド、時間、メッセージ、レベルなどの一般的な部分になるように、何らかの方法でデータを正規化しようとすることです。

質問

  1. log4jはこのようなものをサポートしていますか?つまり、前述の部分を取得するために使用できるある種のオブジェクトを返す文字列を取得しますか?
  2. そうでない場合、これまたは同様のことを行うために利用できるライブラリはありますか?
  3. 理想的には、一致する複数のパターンと、他のパターンが一致しない場合にデフォルトで使用されるフォールバックを提供できれば、それが必要です。このようなものはありますか?

Awstatsのようなものはログの解析を行いますが、そうではないことを理解していますが、この場合、私の2つの選択肢は、それを実行するライブラリを使用するか、何かを書くことです。

4

1 に答える 1

3

そのためにパーサーコンビネーターを使用できます。たとえば、これは整数のタプルを解析します。

import scala.util.parsing.combinator.RegexParsers

object Parser extends RegexParsers {
  def intPair = INT ~ "," ~ INT ^^ { x => (x._1._1.toInt,x._2.toInt) }
  val INT = "[0-9]+".r
}


Parser.parseAll(Parser.intPair, "10,22") // => (10,22)

ここに良い出発点があります:http://www.codecommit.com/blog/scala/the-magic-behind-parser-combinators

于 2012-03-09T14:01:40.967 に答える