尝试使用tailf-f漂亮地打印json部分的日志文件,并保留未转换的头



日志文件的一行示例:

2018-07-30T10:47:23.027Z|SomeInfo|DEBUG|4141dadfawe||Sending request:{"some":{"json":"eggsspam"}}

我的别名:

ssh -o StrictHostKeyChecking=no 
-o UserKnownHostsFile=/dev/null root@10.143.3.51 
-p614 "tail 
-f  /var/opt/pathtolog/log.log" | grep 
-o --line-buffered {.*:{.*:.*}} | jq .
}

因此,现在我正在通过ssh使用tail-f读取一个日志文件,只使用grep-json,并将其发送到jq。这部分工作得很好,json格式也很好,但我正在丢失头。

综上所述:2018-07-30T10:47:23.027Z|SomeInfo|DEBUG|4141dadfawe ||发送请求:我想打印这个部分不变,然后漂亮地打印格式良好的json{ "some": { "json": "eggsspam" } }

这可能会有所帮助,因为它使用的是awk,例如:

echo '2018-07-30T10:47:23.027Z|SomeInfo|DEBUG|4141dadfawe||Sending request:{"some":{"json":"eggsspam"}}' 
| awk -F"request:" '{ print $1"requests:"; print $2 | "jq" }'

它将输出:

2018-07-30T10:47:23.027Z|SomeInfo|DEBUG|4141dadfawe||Sending requests:
{
"some": {
"json": "eggsspam"
}
}

它的工作原理是使用分隔符-F"request:",然后只向jq传递第二列,在这种情况下,需要漂亮打印的jsonprint $2 | "jq"

这是一个使用{.*}作为模式搜索json的示例,这肯定是可以改进的,在这种情况下json必须是日志的最后一部分才能工作:

$ echo '2018-07-30T10:47:23.027Z|SomeInfo|DEBUG|4141dadfawe||Sending request:{"some":{"json":"eggsspam"}}' 
| awk 'match($0, /{.*}/) {
print substr($0, 0, length($0)-RLENGTH);
print substr($0, RSTART, RLENGTH) | "jq"
}'

它还将输出:

2018-07-30T10:47:23.027Z|SomeInfo|DEBUG|4141dadfawe||Sending request:
{
"some": {
"json": "eggsspam"
}
}

最新更新