一些背景
我正在编写一个应用程序,它将提供连续的字符串/数据流。这些数据是日志消息,但来自不同的机器和不同的应用程序。因此它们的格式可能略有不同。
我的目标是从每条消息中获取单独的组件,并且无论来源如何,都尝试以某种方式规范化数据,以便主机、线程、时间、消息和级别等公共(public)部分。
问题
- log4j 对这样的东西有支持吗?即采用一个字符串返回某种类型的对象,该对象可用于获取前面提到的部分?
- 如果没有,是否有任何库可以执行此操作或类似操作?
- 理想情况下,如果我可以提供多个模式以供其匹配,并且如果其他模式均不匹配,则默认使用后备模式。有这样的吗?
我意识到像 Awstats 这样的事情可以进行日志解析,但在这种情况下,我唯一的两个选择是使用一个库来完成它或编写一些东西,我不想重新发明轮子。
最佳答案
您可以为此使用解析器组合器。例如。这解析了一个整数元组:
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
关于java - 将日志字符串解析为可用部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9633080/