Как отслеживать только последние n строк файла журнала?

110

У меня есть растущий файл журнала, для которого я хочу отображать только последние 15 строк. Вот что я знаю, я могу сделать:

tail -n 15 -F mylogfile.txt

Когда файл журнала заполнен, tailдобавляются последние строки на экран.

Я ищу решение, которое отображает только последние 15 строк и избавляется от строк до последних 15 строк после его обновления. У вас есть идея?

Марк-Оливье Титё
источник
28
Измените размер окна терминала до 15 строк.
Джонатан
1
Это тоже хорошо.
Марк-Оливье Титё,
3
@ Джонатан гений!
Марселлус Уоллес
Не удалось поднять комментарий Джонатана, иначе он потерял 15 голосов
jdero

Ответы:

151

Может быть достаточно использовать часы:

$ watch tail -n 15 mylogfile.txt
Уильям Перселл
источник
1
Большой! Большое спасибо. Я также изучаю команду «смотреть» в процессе.
Марк-Оливье Титё
1
Имейте в виду, что это решение не работает, если размер файла увеличивается более чем на 15 строк между двумя watchобновлениями. Вы можете использовать, -nчтобы изменить этот интервал.
bfontaine
25

Если вы используете часы, попробуйте -nустановить интервал между каждым обновлением.

Таким образом, следующее будет вызывать хвост каждые 2 секунды

$ watch -n 2 tail -n 15 mylogfile.txt

в то время как этот опрашивает его каждую 1 секунду

$ watch -n 1 tail -n 15 mylogfile.txt
Тургон
источник
13

Вы можете транслировать лог-файл, используя меньше и нажимая SHIFT + F, который будет транслировать файл, используя меньше. $ less mylogfile.txt Затем просто нажмите SHIFT + F, и он будет транслироваться. Я думаю, что это удобно для мониторинга файлов журнала, которые обновляются.

Никлас Розенкранц
источник
1
Это очень хороший!
Кайзер
8

Может быть, вы найдете этот -dпараметр удобным.

man watch

-d Выделите различия между последовательными обновлениями. Option будет читать необязательный аргумент, который изменяет подсветку на постоянную, позволяя увидеть, что изменилось хотя бы один раз с первой итерации.

michalzuber
источник
1
Хороший улов тоже!
Марк-Оливье Титё
0

В Solaris, AIX или HPUX или UNIX-подобных (включая Linux) вы можете использовать сценарии для мониторинга журналов или что-нибудь подобное:

while true; 
    clear; 
    do date; 
    echo ;
    echo "MONITORING LOG IN "/path/to/file.log": "; 
    echo "Obs.: Last 20 lines of a logfile:
    echo ;
    tail -20 /path/to/file.log;
    echo ;
sleep 5; 
done
Жоао Херардо
источник