0

一些上下文

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

我的目标是从每条消息中获取单独的组件,并且无论来源如何,都尝试以某种方式规范化数据,以便主机、线程、时间、消息和级别等通用部分。

问题

  1. log4j 对这样的东西有任何支持吗?即获取返回某种对象的字符串,该对象可用于获取前面提到的部分?
  2. 如果没有,是否有任何库可用于执行此操作或类似的东西?
  3. 理想情况下,如果我可以提供多个模式来匹配它,并且如果没有其他模式匹配,则默认使用回退。有这样的吗?

我意识到像 Awstats 这样的东西做日志解析,但在这种情况下,我唯一的两个选择是使用一个库来做它或写一些东西,我宁愿不重新发明轮子。

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 回答