web-dev-qa-db-fra.com

Comment afficher les fichiers journaux sous Linux et appliquer des filtres personnalisés lors de l'affichage?

J'ai besoin de lire des fichiers journaux gigantesques sur un système Linux. Il y a beaucoup de fouillis dans les journaux. En ce moment, je fais quelque chose comme ça:

cat logfile.txt | grep -v "IgnoreThis\|IgnoreThat" | less

Mais c'est fastidieux - chaque fois que je veux ajouter un autre filtre, je dois quitter less et modifier la ligne de commande. Certains filtres sont relativement compliqués et peuvent être multilignes.

Je voudrais un moyen d'appliquer des filtres pendant que je lis le journal et un moyen de sauvegarder ces filtres quelque part.

Y at-il un outil qui peut faire cela pour moi? Je ne peux pas installer de nouveau logiciel, donc j'espère que c'est quelque chose qui serait déjà installé - par exemple, moins, vi, quelque chose dans une librairie Python ou Perl, etc.

Changer le code qui génère le journal pour générer moins n'est pas une option.

42
Dan

Essayez l’outil multitail - tout en vous permettant d’afficher plusieurs journaux à la fois, mais je suis certain qu’il vous permet d’appliquer les filtres de regex de manière interactive.

4
gareth_bowles

Utilisez la commande &pattern avec moins.

De la page de manuel pour moins

&modèle

          Display  only  lines which match the pattern; lines which do not
          match the pattern are not displayed.  If pattern  is  empty  (if
          you  type  &  immediately  followed  by ENTER), any filtering is
          turned off, and all lines are displayed.  While filtering is  in
          effect,  an  ampersand  is  displayed  at  the  beginning of the
          Prompt, as a reminder that some lines in the file may be hidden.

          Certain characters are special as in the / command:

          ^N or !
                 Display only lines which do NOT match the pattern.

          ^R     Don't interpret regular expression  metacharacters;  that
                 is, do a simple textual comparison.
104
ALF

Sur la base de la réponse de ghostdog74 et de la page de manuel less, j'ai proposé ceci:

~/.bashrc:

export LESSOPEN='|~/less-filter.sh %s'
export LESS=-R  # to allow ANSI colors

~/less-filter.sh:

#!/bin/sh
case "$1" in
*logfile*.log*) ~/less-filter.sed < $1
  ;;
esac

~/less-filter.sed:

/deleteLinesLikeThis/d  # to filter out lines
s/this/that/  # to change text on lines (useful to colorize using ANSI escapes)

Ensuite:

  • less logfileFooBar.log.1 - applique le filtre s’applique automatiquement.
  • cat logfileFooBar.log.1 | less - pour afficher le journal sans filtrage

C'est suffisant pour le moment mais j'aimerais quand même pouvoir éditer les filtres à la volée.

4
Dan

voir la man page de moins. Vous pouvez utiliser certaines options pour rechercher des mots, par exemple. Il dispose également d'un mode d'édition de ligne. 

0
ghostdog74

Il existe une application de Casstor Software Solutions appelée LogFilter (www.casstor.com) qui permet de modifier les fichiers texte Windows/Mac/Linux et d’effectuer facilement le filtrage des fichiers. Il supporte plusieurs filtres ainsi que des expressions régulières. Je pense que c'est peut-être ce que vous cherchez.

0
Ben