Tailing von zwei Protokolldateien

14

Ich habe eine Webanwendung, die in einer Reihe von Protokolldateien Leistungsinformationen ausgibt. Eine Protokolldatei gibt Code-Ausführungszeiten und eine andere SQL-Zeitangaben aus. Ich habe keine Kontrolle über den Logger oder den Code, der die Logdateien erzeugt, aber ich möchte die Logs an einem Ort ausgeben.

Momentan mache ich so etwas

tail -f sqlLogs.log | grep sql-time
tail -f perflogs.log | grep exec-time

Dies gibt jedes Mal etwas an die Konsole aus, wenn ein SQL in der Anwendung ausgeführt wird. Ich muss den Code jedoch in zwei separaten SSH-Sitzungen ausführen. Allerdings möchte ich beide Dateien in der gleichen SSH-Sitzung tailen können. Ist das möglich?

Codemwnci
quelle

Antworten:

20

Ja, tail gibt Zeilen aus, die an alle in der Befehlszeile angegebenen Dateien angehängt sind:

tail -F sqlLogs.log perflogs.log | egrep '(sql-time|exec-time)'
Riccardo Murri
quelle
Das ist einfacher als ich! (lol, nur eine Antwort, die nicht von mir stammt, ich lasse meine Neugierde)
Jeremy
4

Schauen Sie sich MultiTail an . Es ist dein Freund.

Sie können mehrere Anmeldeschwänze verwenden

 - verschiedene Fenster, ein Al-Vim ist "split"
 - oder lassen Sie die beiden (oder N) Streams in einer Ansicht zusammenführen und
 - Sie können Dämpfe nach Regex filtern und, wenn Sie möchten,
 - Es wird die Ausgabe in eine Datei "abschlagen"

http://www.vanheusden.com/multitail/

Unter Ubuntu 10.04: sudo apt-get install multitail

Mike Diehn
quelle
2

Ja, mit dem screenBefehl können Sie zwei Bash-Sitzungen auf einem Terminal ausführen.

  • Führen Sie, screenum loszulegen,
  • Geben Sie Ctrl-adann S(HINWEIS: Großbuchstabe S) ein, um den Bildschirm in zwei Teile zu teilen.
  • Ctrl-aDann Tabwerden Sie zwischen den beiden Sitzungen bewegen.
  • Ctrl-aDann cwird eine Shell in dieser neuen Region gestartet.

(Bitte lesen Sie die Antwort von Riccardo, bevor Sie diese verwenden. Sie ist viel einfacher. Ich lasse sie hier, da sie für Menschen mit ähnlichen, aber unterschiedlichen Problemen nützlich sein kann.)

Jeremy
quelle
0

Sie können mkfifo verwenden, um die Ausgabe auf eine Pipe zu multiplexen

erstelle eine FIFO-Pipe, füge n Dateien der Pipe hinzu und katze dann die Pipe

 mkfifo pipeName
 tail file1 &
 tail file2 &
 ...
 tail fileN &
 cat pipeName

wenn fertig

 rm pipeName
dvhh
quelle
1
Dabei wird das FIFO nicht verwendet. Sie möchten wahrscheinlich die Tail-Befehle sein tail fileN >> pipeName.
Jeremy Kerr