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

标签 java scala pattern-matching logging logparser

一些背景

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

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

问题

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

我意识到像 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/

相关文章:

java - 你真的在java中使用你的反向域来命名包吗?

java - 仅输入到终端的底行

scala - 如何在运行时枚举无形的记录和访问字段键?

scala - 如何将案例类放入 rdd 中并使其表现得像元组(对)?

scala - 将 Scala 中的模块项目设置为 sbt 项目?

algorithm - 如何使用 KMP 失败函数确定最小长度重复子串?

haskell - 无论模式是否详尽,为什么恒等函数有时会发生变化?

java - 改进数组检查方法

java - 子类构造函数不被识别

r - 数据帧上下文中的模式匹配