Вопрос

Некоторые контекст

Я пишу приложение, которое будет подано непрерывное поток строк / данных. Данные являются журнальными сообщениями, а из разных машин и различных приложений. Таким образом, их формат может быть немного другим.

Моя цель - получить отдельных компонентов из каждого сообщения, и независимо от источника, попробуйте в некотором роде, чтобы таким образом нормализовать данные, так что общие детали, такие как хост, нить, время, сообщение и уровень.

<Сильные> вопросы

  1. У log4j есть поддержка для чего-то вроде? I.e. Принимая строку, возвращающую цель своего рода, которое можно использовать, чтобы получить деталь, упомянутую ранее?
  2. Если нет, есть ли какие-то библиотеки для этого или что-то подобное?
  3. В идеале я бы хотел, если бы я мог предоставить несколько шаблонов для его совпадения, а падение, которая используется по умолчанию, если ни одна из других шаблонов совпадает. Что-нибудь подобное?

    Я понимаю, что такие вещи, как AWSTATS, разбираются в журнал, а что нет, но в этом случае мои единственные два варианта - использовать библиотеку, которая делает это или писать что-то, и я бы предпочел не изобретать колесо.

Это было полезно?

Решение

You could use parser combinators for that. E.g. this parses a tuple of integers:

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)

Here is a good starting point: http://www.codecommit.com/blog/scala/the-magic-behind-parser-combinators

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top