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?


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

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

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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.