Wu *_*nhe 4 error-handling logging json command-line-interface jq
当用于jq处理日志文件时,某些行可能会被破坏,因此jq会引发错误并停止处理。
例如完整的日志:
{"level":"debug","time":"2021-09-24T19:42:47.140+0800","message":"sent send binary to ws server1","pid":41491,"cid":"32likw","num":1,"count":5120}
{"level":"debug","time":"2021-09-24T19:42:47.305+0800","message":"sent send binary to ws server2","pid":41491,"cid":"32likw","num":1,"count":5120}
{"level":"debug","time":"2021-09-24T19:42:47.469+0800","message":"sent send binary to ws server3","pid":41491,"cid":"32likw","num":1,"count":5120}
{"level":"debug","time":"2021-09-24T19:42:47.499+0800","message":"sent send binary to ws server4","pid":41491,"cid":"32likw","num":1,"count":5120}
{"level":"debug","time":"2021-09-24T19:42:47.581+0800","message":"sent send binary to ws server5","pid":41491,"cid":"32likw","num":1,"count":5120}
Run Code Online (Sandbox Code Playgroud)
jq 处理得很好:
< snippet1.json jq -C -r '.message'
sent send binary to ws server1
sent send binary to ws server2
sent send binary to ws server3
sent send binary to ws server4
sent send binary to ws server5
Run Code Online (Sandbox Code Playgroud)
损坏的(第 3 行的最后一部分丢失):
{"level":"debug","time":"2021-09-24T19:42:47.140+0800","message":"sent send binary to ws server1","pid":41491,"cid":"32likw","num":1,"count":5120}
{"level":"debug","time":"2021-09-24T19:42:47.305+0800","message":"sent send binary to ws server2","pid":41491,"cid":"32likw","num":1,"count":5120}
{"level":"debug","time":"2021-09-24T19:42:47.469+0800","message":"sent send binary to ws server3","pi
{"level":"debug","time":"2021-09-24T19:42:47.499+0800","message":"sent send binary to ws server4","pid":41491,"cid":"32likw","num":1,"count":5120}
{"level":"debug","time":"2021-09-24T19:42:47.581+0800","message":"sent send binary to ws server5","pid":41491,"cid":"32likw","num":1,"count":5120}
Run Code Online (Sandbox Code Playgroud)
jq停在虚线处:
< snippet2.json jq -C -r '.message'
sent send binary to ws server1
sent send binary to ws server2
parse error: Invalid string: control characters from U+0000 through U+001F must be escaped at line 4, column 2
Run Code Online (Sandbox Code Playgroud)
我希望jq可以忽略第三行并继续,就像这样:
< snippet2.json jq -C -r '.message'
sent send binary to ws server1
sent send binary to ws server2
sent send binary to ws server4
sent send binary to ws server5
Run Code Online (Sandbox Code Playgroud)
我尝试使用另一篇文章-R中提到的方法,但对这种情况没有帮助。
< snippet2.json jq -C -R -r '.message'
jq: error (at <stdin>:1): Cannot index string with string "message"
jq: error (at <stdin>:2): Cannot index string with string "message"
jq: error (at <stdin>:3): Cannot index string with string "message"
jq: error (at <stdin>:4): Cannot index string with string "message"
jq: error (at <stdin>:5): Cannot index string with string "message"
Run Code Online (Sandbox Code Playgroud)
您能否告诉我是否有任何解决方案/技能可以忽略/跳过/抑制此类错误并获得其余结果?
要跳过断线,您可以使用:
jq -Rr 'fromjson? | .message'
Run Code Online (Sandbox Code Playgroud)
如果您想对它们做其他事情,您可以从以下内容开始:
jq -R '. as $line | try fromjson catch $line'
Run Code Online (Sandbox Code Playgroud)
对于其他选项,请参阅:
:有没有办法让 jq 在输入文件中遇到错误后继续运行?jq 可以处理损坏的 JSON 吗?
在jq 常见问题解答中。
| 归档时间: |
|
| 查看次数: |
2652 次 |
| 最近记录: |