如何將日誌檔案從 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

相關內容