Как обработать файл журнала из tail -f в awk и в jq?

Как обработать файл журнала из tail -f в awk и в jq?

Мой пример использования следующий: у меня есть файл журнала Apache, в котором я регистрирую только json-данные из PHP. Из-за того, как 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"}

это будет отображено правильно, но если json записан во время работы tail, он не отобразится.

решение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

Связанный контент