Como processar um arquivo de log de tail -f em awk em jq?

Como processar um arquivo de log de tail -f em awk em jq?

Meu caso de uso é o seguinte: Eu tenho um arquivo de log do Apache onde estou registrando apenas dados json do PHP. Por causa de como o Apache está imprimindo os Logs, tenho que cortar o início e o final de cada linha com o awk. O resultado é uma string json que desejo imprimir com jq.

Para canalizar do tail para o awk, tenho que usar o stdbuf. O comando completo que criei é este:

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

que não está funcionando. Acho que é por causa do jq, mas --stream ou --unbuffered também não está funcionando.

Alguém sabe como fazer o que eu quero?

EDITAR: Um exemplo de JSON seria apenas

{"foo": "bar"}

isso será exibido corretamente, mas se o json for escrito enquanto o tail estiver em execução, ele não será exibido.

Responder1

Acabei de encontrar uma solução: você precisa "desbloquear" cada comando com stdbuf -oO. Então deveria ficar assim:

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

informação relacionada