我玩了一段时间并重新研究,但我无法找到解决方案。我有一些巨大的日志,有时也有巨大的 JSONS。但为了简化想象如下:
mkdir logs
cd logs/
echo "$(date) [INFO] something" >> huge_log.log
echo "$(date) [INFO] something more" >> huge_log.log
echo "$(date) [INFO] Something with json: {\"foo\": \"bar\"}" >> huge_log.log
tail -n 5 -f huge_log.log | how_to_filter? | jq '.'
是否有可能看到这样的东西(作为 jq '.' 输出的 json 将是):
Tue Aug 18 12:42:24 CEST 2020 [INFO] something
Tue Aug 18 12:42:29 CEST 2020 [INFO] something more
Tue Aug 18 12:43:05 CEST 2020 [INFO] Something with json:
{
"foo": "bar"
}
因此,不知何故,在打印日志时自动检测 json,并将它们显示为输出:
echo "{\"foo\": \"bar\"}" | jq '.'
{
"foo": "bar"
}
以下内容适用于您的示例,对我来说似乎很合理。我正在遍历日志文件中的每一行,如果一行与正则表达式“{.*}”匹配,则将其识别为 json 对象,然后使用 jq 格式化。如果正则表达式不匹配,但它会正常打印。我对其进行了测试,它实际上也适用于更大更复杂的文件。