Zeigen Sie nur die neuen Einträge in einer wachsenden Protokolldatei an

20
tail -f x.log

Ich verwende diesen Befehl, um eine wachsende Protokolldatei in der Eingabeaufforderung anzuzeigen.

Ich interessiere mich nur für die Protokollzeilen, die nach dem Ausführen in die Datei geschrieben werden, tail -fund nicht für die Protokolle, die zuvor in die Datei geschrieben wurden tail -f. Aber tail -fBefehl beim Start, nimmt die letzten 10 Zeilen und zeigt es an.

Das verwirrt mich manchmal, wenn diese Protokolle frisch generiert werden (oder) es sich um alte Protokolle handelt?

Wie kann ich tail -f so anpassen, dass nur die neuen Einträge ausgegeben werden?


quelle

Antworten:

31

Du kannst es versuchen:

tail -n0 -f x.log

Aus der Manpage :

-n, --lines = K gibt
die letzten K Zeilen anstelle der letzten 10 aus; Oder geben Sie mit -n + K Zeilen aus, die mit Kth beginnen

Taliezin
quelle
12

Sie können die -n0Option verwenden, um 0 Zeilen anzuzeigen. So

tail -n0 -f some.log
fredtantini
quelle
2

Sie können auch den lessBefehl like verwenden

  1. less file_name.log (Die Protokolldatei wird geöffnet und zeigt die erste Seite der Protokolldatei an.)
  2. drücke shift+ f(um wie tail -f zu handeln)
  3. Für den Fall, dass Sie nach einem Schlüsselwort in der Protokolldatei suchen müssen. Drücken Sie ctrl+ c, um den Endmodus zu verlassen und nach dem Schlüsselwort als /Schlüsselwort und ?Schlüsselwort zu suchen .
Ragu Rathish
quelle
Hiermit werden nicht nur die neuen Einträge in einer wachsenden Protokolldatei angezeigt.
Spooky
0

Ich habe diesen Ansatz erstellt, als ich Einträge im Docker-Container überwachen musste:

LOG_COUNT=0
LOGS=/var/logs/your_logs

function HEART_BEAT() {
    LOG_COUNT_NEW=$(wc -l $LOGS | awk '{ print $1 }')
    tail -n $(( $LOG_COUNT_NEW - $LOG_COUNT )) $LOGS
    LOG_COUNT=$LOG_COUNT_NEW
}

Hoffe das hilft!

Number16BusShelter
quelle