Как отслеживать только последние 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 будет читать необязательный аргумент, который изменяет подсветку на постоянную, позволяя увидеть, что изменилось хотя бы один раз с первой итерации.


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.