web-dev-qa-db-fra.com

Coloriser la sortie de queue

J'ai essayé de rendre la queue un peu plus lisible pour les démarrages de serveur. Ma commande actuelle filtre la plupart des messages INFO et DEBUG du démarrage:

tail -F ../server/durango/log/server.log | grep -e "ERROR" -e "WARN" -e "Shutdown" -e "MicroKernel" | grep --color=auto -E 'MicroKernel|$'

Ce que je voudrais faire est de créer quelque chose qui mettrait en évidenceAVERTIRen jaune etERREURen rouge et MicroKernel en vert. J'ai essayé de simplement piping grep --color = auto plusieurs fois, mais la seule couleur qui survit est la dernière commande du tube.

Y a-t-il un one-liner pour le faire? Ou même une ligne multiple?

19
tpederson

oui, il y a moyen de le faire. Autrement dit, tant que votre terminal prend en charge séquences d'échappement ANSI. C'est la plupart des terminaux qui existent.

Je pense que je n'ai pas besoin d'expliquer comment grep, sed etc. Le point est la couleur correcte?

voir ci-dessous, cela fera

WARN yellow
ERROR red
foo   green

voici l'exemple:

kent$ echo "WARN
ERROR
foo"|sed 's#WARN#\x1b[33m&#; s#ERROR#\x1b[31m&#; s#foo#\x1b[32m&#'

Remarque : \x1b est hexadécimal pour le caractère ESC (^VEsc).

pour voir le résultat:

enter image description here

25
Kent

J'ai écrit un script il y a quelques années. Vous pouvez facilement couvrir le cas de plusieurs couleurs en reliant les invocations successives de highlight les unes aux autres.

Du README:

Usage: ./highlight [-i] [--color=COLOR_STRING] [--] <PATTERN0> [PATTERN1...]

This is highlight version 1.0.

This program takes text via standard input and outputs it with the given
perlre(1) pattern(s) highlighted with the given color.  If no color option
is specified, it defaults to 'bold red'.  Colors may be anything
that Perl's Term::ANSIColor understands.  This program is similar to
"grep --color PATTERN" except both matching and non-matching lines are
printed.

The default color can be selected via the $HIGHLIGHT_COLOR environment
variable.  The command-line option takes precedence.

Passing -i or --ignore-case will enable case-insensitive matching.

If your pattern begins with a dash ('-'), you can pass a '--' argument
after any options and before your pattern to distinguish it from an
option.
6
Dave Goodell

Vous pouvez créer un journal coloré au lieu d'utiliser une commande complexe.

enter image description here

Pour php c'est comme ça:

echo "^[[30;43m".$ip."^[[0m";

Le point clé est d'utiliser Ctrl-v ctrl- [pour saisir un vert ^ [sous le mode insertion dans vim, l'entrée directe ^ [ne fonctionne pas.

enter image description here

Plus d'infos ici

0
Mark Li

J'utilise une version de ceci que j'ai piratée: observateur de journal de python

0
Art Swri

J'utilise un outil appelé grc pour cela depuis des années. fonctionne comme un charme. Il contient de très bons modèles pour de nombreux formats et sorties de journaux standard et il est facile de définir les vôtres. Une commande que j'utilise souvent est

grc tail -f /var/log/syslog

Il colorise la sortie de syslog afin qu’il soit facile de repérer les erreurs (généralement marquées en rouge).

Trouvez l'outil ici:

https://github.com/garabik/grc

(Il est également disponible sous forme de paquet pour les goûts linux les plus courants).

0
kimusan