Bra*_*don 7 unix error-handling logging json jq
我正在使用jq来解析我的一些日志,但由于各种原因无法解析某些日志行.有没有办法让jq忽略那些线?我似乎无法找到解决方案.我试图使用某些人推荐的--seq参数,但是--seq忽略了我文件中的所有行.
Cri*_*sti 17
这是一个旧线程,但这是另一个完全在jq
. 这允许您处理正确的 json 行并打印出非 json 行:
jq -R '. as $line | try (fromjson) catch $line'
Run Code Online (Sandbox Code Playgroud)
如果需要进行额外的jq处理:
jq -R . as $line | try (fromjson | <further processing for proper json lines>) catch $line'
Run Code Online (Sandbox Code Playgroud)
Pie*_*ter 14
我有日志流,其中一些消息采用 json 格式。我想通过 jq 通过管道传输 json 消息,然后回显其余部分。
json 消息位于一行。
解决方案:使用 grep 和 tee 将行分成两个流,以“^{”开头的行通过 jq 进行管道传输,其余的仅回显到终端。
kubectl logs -f web-svjkn | tee >(grep -v "^{") | grep "^{" | jq .
或者
cat logs | tee >(grep -v "^{") | grep "^{" | jq .
解释: tee 生成第二个流,grep -v 打印非 json 信息,第二个 grep 仅将看起来像 json 左括号的内容通过管道传输给 jq。
jwo*_*der 12
假设每个日志条目恰好是一行,你可以使用-R
或--raw-input
选项告诉jq保留未分析的行,之后你可以fromjson? |
在你的过滤器前面使jq尝试将每一行解析为JSON并丢弃那些错误的行.