将日志字符串解析为可用部分

时间:2012-03-09 11:11:23

标签: java scala pattern-matching logging logparser

某些背景

我正在编写一个应用程序,它将连续提供字符串/数据流。数据是日志消息,但来自不同的机器和不同的应用程序。所以他们的格式可能略有不同。

我的目标是从每条消息中获取单个组件,而不管源是什么,尝试以某种方式规范化数据,以便常见部分,如主机,线程,时间,消息和级别。

问题

  1. log4j是否支持此类内容?即拿一个字符串返回某种可用于获取之前提到的部分的物体?
  2. 如果没有,是否有可用的库或类似的文件?
  3. 理想情况下我喜欢它,如果我可以提供多个匹配的模式,并且如果没有其他模式匹配则默认使用后退。有这样的吗?
  4. 我意识到像Awstats这样的东西会记录解析,但是在这种情况下,我只有两个选项是使用一个可以执行此操作的库或者写一些东西,而我宁愿不重新发明轮子。

1 个答案:

答案 0 :(得分: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