如何将日志文件从 tail -f 处理到 awk 到 jq 中?

如何将日志文件从 tail -f 处理到 awk 到 jq 中?

我的用例如下:我有一个 Apache 日志文件,其中仅记录来自 PHP 的 json 数据。由于 Apache 打印日志的方式,我必须使用 awk 修剪每行的开头和结尾。结果是一个 json 字符串,我想用 jq 漂亮地打印它。

为了从 tail 通过管道传输到 awk,我必须使用 stdbuf。我想出的完整命令是这样的:

stdbuf -o0 tail -f  -n 1 /var/log/apache2/error.log | awk '{print substr($0,83, length($0)- 166); }' | jq 

这是行不通的。我认为这是因为 jq,但是 --stream 或 --unbuffered 也不起作用。

有人知道如何做我想做的事吗?

编辑: 一个示例 JSON 就是

{"foo": "bar"}

这将正确显示,但如果在 tail 运行时写入 json,则不会显示。

答案1

我刚刚找到了一个解决方案:您必须使用 stdbuf -oO“取消缓冲”每个命令。所以它应该看起来像这样:

stdbuf -o0 tail -f  -n 2 /var/log/apache2/error.log | stdbuf -o0 awk '{print substr($0,83, length($0)- 166); }' | jq

相关内容