2012-03-09 12 views
0

いくつかの文脈解析ログ列

私は、文字列/データの連続ストリームを供給されるアプリケーションを書いています。データはログメッセージですが、マシンとアプリケーションによって異なります。だから彼らのフォーマットは若干異なるかもしれません。

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

質問

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

私はAWStatsのようなものは、構文解析をログに記録し、何をしません実現が、この場合には、私の唯一の2つのオプションがそれをしないライブラリを使用するか、または何かを書くと、私はむしろ車輪の再発明はないと思いますしています。

+1

- Splunkの(HTTPのようなものは使用しない理由:// WWWを。 splunk.com/)。 – Nim

答えて

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

+0

それは素晴らしいアイデアです。私は前にそれらと一緒に遊んでいましたが、実際にそれを実際に使用したことはありませんでした。彼らが存在していたことを完全に忘れてしまった。いずれかのフォーマットがまさに期待どおりでない場合に、デフォルトを常に一致させる方法はありますか? – zcourts