Назад | Перейти на главную страницу

Как получить непрерывный поток с разбиением на страницы

Я отправил это в Superuser, но не получил желающих: https://superuser.com/questions/832578/how-to-grep-a-continuous-stream-with-paging

Я хочу взять файл журнала и отфильтровать некоторые нерелевантные записи журнала, например, на уровне INFO. Приведенный выше ответ о переполнении стека помог мне частично:

$ tail -f php_error_log | grep -v INFO

Следующее, что я хочу, - это иметь подкачку в этом потоке, например, с less. less + F работает с непрерывными потоками, но я не могу применить это к grep. Как я могу этого добиться?


С момента публикации этого вопроса я работал над ним и обнаружил, что less ожидает появления EOF и зависает, пока не получит его (источник). Это объясняет, почему попытки следовать за трубкой не работают. Я неуклюже взломал короткий скрипт, чтобы делать то, что хочу:

#!/bin/bash
tail -f /data/tmp/test.txt | grep --line-buffered foo > /data/tmp/foo &
pid=$!
echo $pid
sleep 1
less +F /data/tmp/foo
kill $pid
rm /data/tmp/foo

Я убежден, что можно сделать это более элегантно, возможно, с помощью временного файла, который автоматически очищается без прямого взаимодействия.

Как насчет этого:

grep -V INFO php_error_log | less +F

Или вы можете бежать multitail php_error_log, затем после запуска многоадресной передачи нажмите e и следуйте инструкциям, чтобы добавить регулярное выражение для фильтрации. Для непрерывного мониторинга одного или нескольких файлов журналов с течением времени хорошим решением является многопользовательская служба.