Como monitorar apenas as últimas n linhas de um arquivo de log?

110

Eu tenho um arquivo de log crescente para o qual quero exibir apenas as últimas 15 linhas. Aqui está o que eu sei que posso fazer:

tail -n 15 -F mylogfile.txt

À medida que o arquivo de log é preenchido, tailanexa as últimas linhas à exibição.

Estou procurando uma solução que exiba apenas as últimas 15 linhas e se livre das linhas antes das últimas 15 após a atualização. Você tem uma ideia?

Marc-Olivier Titeux
fonte
28
Redimensione a janela do seu terminal para 15 linhas.
Jonathan
11
Essa também é boa.
Marc-Olivier Titeux
3
@Jonathan genius!
Marsellus Wallace
Não foi possível upvote comentário de Jonathan ou ele perde o sabor de ter 15 upvotes
jdero

Respostas:

151

Pode ser suficiente usar o watch:

$ watch tail -n 15 mylogfile.txt
William Pursell
fonte
11
Ótimo! Muito obrigado. Eu também aprendo o comando 'watch' no processo.
Marc-Olivier Titeux
11
Esteja ciente de que esta solução não funcionará se o arquivo aumentar mais de 15 linhas entre duas watchatualizações. Você pode usar -npara alterar esse intervalo.
bfontaine
25

Se você usa o watch, tente a -nopção de controlar o intervalo entre cada atualização.

Assim, o seguinte chamaria cauda a cada 2 segundos

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

enquanto este pesquisa cada 1 segundo

$ watch -n 1 tail -n 15 mylogfile.txt
Turgon
fonte
13

Você pode transmitir o arquivo de log executando menos e pressionando SHIFT + F que transmitirá o arquivo usando menos. $ less mylogfile.txt Em seguida, pressione SHIFT + F e ele será transmitido. Eu acho que é conveniente para monitorar arquivos de log atualizados.

Niklas Rosencrantz
fonte
11
Isso é muito legal!
kaiser
8

Talvez você encontre os -dparâmetros à mão.

man watch

-d Destaque as diferenças entre atualizações sucessivas. Option lerá o argumento opcional que destaca as alterações como permanentes, permitindo ver o que mudou pelo menos uma vez desde a primeira iteração.

michalzuber
fonte
11
Boa captura também!
Marc-Olivier Titeux 28/05
0

No Solaris, AIX ou HPUX ou UNIX-like (incluindo Linux), você pode usar scripts para monitorar logs ou algo assim:

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
João Gerardo
fonte