Mise en file d'attente de deux fichiers journaux

14

J'ai une application Web qui génère un certain nombre de fichiers journaux avec des informations sur les performances. Un fichier journal génère des temps d'exécution de code et un autre génère des temporisations SQL. Je n'ai aucun contrôle sur l'enregistreur ou sur le code qui produit les fichiers journaux, mais je souhaite afficher les journaux au même endroit.

Actuellement, je fais quelque chose comme ça

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

Cela renvoie quelque chose à la console chaque fois qu'un SQL est exécuté dans l'application. Mais je dois exécuter le code dans deux sessions SSH distinctes. Cependant, ce que je veux pouvoir tailler les deux fichiers, dans la même session SSH. Est-ce possible?

Codemwnci
la source

Réponses:

20

Oui, les lignes de sortie de queue sont ajoutées à tous les fichiers fournis sur la ligne de commande:

tail -F sqlLogs.log perflogs.log | egrep '(sql-time|exec-time)'
Riccardo Murri
la source
Eh bien, c'est plus facile que ma façon! (lol, vient de voter une réponse qui n'est pas la mienne, je vais laisser la mienne par curiosité)
Jeremy
4

Jetez un œil à MultiTail . C'est ton ami.

Vous pouvez avoir les multiples queues de journal dans

 - différentes fenêtres, le «split» d'un al vim
 - ou faire fusionner les deux (ou N) flux en une seule vue et
 - vous pouvez filtrer les vapeurs par regex et, si vous le souhaitez,
 - il "tee" la sortie dans un fichier

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

Sur Ubuntu 10.04: sudo apt-get install multitail

Mike Diehn
la source
2

Oui, en utilisant la screencommande, vous pouvez avoir 2 sessions bash en cours d'exécution sur un terminal.

  • Courez screenpour commencer,
  • Tapez Ctrl-aensuite S(NOTE: majuscule S) pour diviser l'écran en 2.
  • Ctrl-apuis vous Tabfera passer entre les deux sessions.
  • Ctrl-apuis cdémarrera un shell dans cette nouvelle région.

(Veuillez consulter la réponse de Riccardo avant de l'utiliser, la sienne est beaucoup plus simple, je vais laisser cela de côté car cela peut être utile pour les personnes ayant des problèmes similaires mais différents).

Jeremy
la source
0

Vous pouvez utiliser mkfifo pour multiplexer la sortie vers un tube

créer un tuyau fifo, queue n fichiers au tuyau, puis cat le tuyau

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

Une fois terminé

 rm pipeName
dvhh
la source
1
Cela n'utilise pas réellement le fifo; vous voulez probablement que les commandes tail soient tail fileN >> pipeName.
Jeremy Kerr