日志文件的一行示例:
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"
}
}