Jak monitorować tylko ostatnie n wierszy pliku dziennika?


110

Mam rosnący plik dziennika, dla którego chcę wyświetlić tylko ostatnie 15 wierszy. Oto, co wiem, co mogę zrobić:

tail -n 15 -F mylogfile.txt

Gdy plik dziennika jest wypełniony, taildołącza ostatnie wiersze do wyświetlacza.

Szukam rozwiązania, które wyświetla tylko 15 ostatnich linii i pozbywam się linii przed ostatnimi 15 po aktualizacji. Czy masz pomysł


28
Zmień rozmiar okna terminala na 15 linii.
Jonathan

1
To też jest dobre.
Marc-Olivier Titeux

3
@Jonathan geniusz!
Marsellus Wallace,

Nie można głosować za komentarzem Jonathana lub traci on smak 15 głosujących
jdero

Odpowiedzi:


151

Wystarczy użyć zegarka:

$ watch tail -n 15 mylogfile.txt

1
Wspaniały! Wielkie dzięki. W trakcie tego procesu uczę się także polecenia „obserwuj”.
Marc-Olivier Titeux

1
Należy pamiętać, że to rozwiązanie nie działa, jeśli plik rośnie o więcej niż 15 linii między dwiema watchaktualizacjami. Możesz użyć, -naby zmienić ten interwał.
bfontaine,

25

Jeśli używasz zegarka, wypróbuj -nopcję kontrolowania odstępu czasu między każdą aktualizacją.

Zatem następujące wywołałyby ogon co 2 sekundy

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

podczas gdy ten odpytuje go co 1 sekundę

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

13

Możesz przesyłać strumieniowo plik dziennika uruchomiony mniej i naciskając SHIFT + F, który przesyła plik strumieniowo przy użyciu mniej. $ less mylogfile.txt Następnie naciśnij SHIFT + F, aby rozpocząć transmisję strumieniową. Myślę, że jest to wygodne do monitorowania aktualizowanych plików dziennika.


1
To bardzo miłe!
Kaiser

8

Może uznasz ten -dparam za przydatny.

man watch

-d Podkreśl różnice między kolejnymi aktualizacjami. Opcja odczytuje opcjonalny argument, że zmiany wyróżniają się na stałe, pozwalając zobaczyć, co zmieniło się przynajmniej raz od pierwszej iteracji.


1
Dobry połów też!
Marc-Olivier Titeux

0

W systemach Solaris, AIX, HPUX lub UNIX (w tym Linux) można używać skryptów do monitorowania dzienników lub czegoś podobnego:

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.