Как удалить не логи ascii из журналов? - PullRequest
0 голосов
/ 07 мая 2018

Я хочу удалить не логи ascii из журналов (строки json) и проанализировать их. но я вижу такой текст до того, как начинается моя строка json, как можно удалить такие строки и проанализировать мою строку JSON

SEQ ^ F! Org.apache.hadoop.io.LongWritable ^ Yorg.apache.hadoop.io.Text ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ìþNmbà <92> ш ^ G6ùó¯Ãl ^ @ ^ @ ^ Х ^ Е ^ @ ^ @ ^ @ ^ H ^ @ ^ @ ^^ а / à ¢ à «<8е> ^ Wú {

1 Ответ

0 голосов
/ 07 мая 2018

Вы можете отбросить все до {, если это безопасно, так что вы получите строку json.Я предполагаю, что ваш формат журнала "garbage{json}"

пример,

scala> val log = """SEQ^F!org.apache.hadoop.io.LongWritable^Yorg.apache.hadoop.io.Text^@^@^@^@^@^@ìþNmbÃ<92>w^G6ùó¯Ãl^@^@^X^E^@^@^@^H^@^@^^¯/âë<8e>^Wú{"key1": "value1", "key2": ["1", "2"]}"""
log: String = SEQ^F!org.apache.hadoop.io.LongWritable^Yorg.apache.hadoop.io.Text^@^@^@^@^@^@ìþNmbÃ<92>w^G6ùó¯Ãl^@^@^X^E^@^@^@^H^@^@^^¯/âë<8e>^Wú{"key1": "value1", "key2": ["1", "2"]}

scala> val extractJson = log.dropWhile(char => char != '{')
extractJson: String = {"key1": "value1", "key2": ["1", "2"]}

Затем используйте любой json api, Im, используя circe в следующем примере,

scala> import io.circe.parser._
import io.circe.parser._

scala> parse(extractJson)
res3: Either[io.circe.ParsingFailure,io.circe.Json] =
Right({
  "key1" : "value1",
  "key2" : [
    "1",
    "2"
  ]
})

Если вы хотите извлечь какой-то конкретный элемент json,

scala> res3.map(j => (j \\ "key1").headOption)
res4: scala.util.Either[io.circe.ParsingFailure,Option[io.circe.Json]] = Right(Some("value1"))
...