J'aimerais pouvoir rédiger la sortie d'un fichier journal du serveur contenant des messages tels que:
INFO
SEVERE
etc, et si c'est le cas SEVERE
, affichez la ligne en rouge; si c'est INFO
en vert. Quel type d'alias puis-je configurer pour une tail
commande qui m'aiderait à le faire?
command-line
colors
alias
highlighting
tail
Amir Afghani
la source
la source
sed
: stackoverflow.com/a/14691971/52074Réponses:
Essayez le multitail . C'est une übergeneralization of
tail -f
. Vous pouvez regarder plusieurs fichiers dans des fenêtres séparées, mettre en évidence des lignes en fonction de leur contenu, etc.Les couleurs sont configurables. Si le jeu de couleurs par défaut ne fonctionne pas pour vous, écrivez le vôtre dans le fichier de configuration. Par exemple, appelez
multitail -cS amir_log /path/to/log
avec ce qui suit~/.multitailrc
:Une autre solution, si vous êtes sur un serveur où il est gênant d'installer des outils non standard , consiste à combiner
tail -f
avec sed ou awk pour ajouter des séquences de contrôle de sélection de couleur. Cela nécessitetail -f
de vider sa sortie standard sans délai même lorsque sa sortie standard est un tuyau, je ne sais pas si toutes les implémentations le font.ou avec sed
Si votre sed n'est pas GNU sed, remplacez-le
\o033
par un caractère d'échappement littéral et supprimez-le--unbuffered
.Une autre possibilité consiste à exécuter
tail -f
dans un tampon shell Emacs et à utiliser les capacités de coloration syntaxique d’Emacs.la source
sed
? (désolé d'être paresseux et de ne pas le savoir moi-même!) Mais pourriez-vous s'il vous plaît ajouter unsed
exemple également.tail -f
withawk
, si une chaîne n'a pas INFO et SEVERE , elle n'est pas imprimée. Comment puis - je imprimer les rester des chaînes soit? (La chaîne n'a pas besoin d'être colorée); next
avant les accolades fermantes pour ignorer le traitement ultérieur, et une nouvelle ligne de traitement1 {print}
à la fin (1
signifie toujours).sed --unbuffered -e 's/\(.*FATAL.*\)/\o033[1;31m\1\o033[0;39m/' -e 's/\(.*ERROR.*\)/\o033[31m\1\o033[39m/' -e 's/\(.*WARN.*\)/\o033[33m\1\o033[39m/' -e 's/\(.*INFO.*\)/\o033[32m\1\o033[39m/' -e 's/\(.*DEBUG.*\)/\o033[34m\1\o033[39m/' -e 's/\(.*TRACE.*\)/\o033[30m\1\o033[39m/' -e 's/\(.*[Ee]xception.*\)/\o033[1;39m\1\o033[0;39m/'
grc , le colorant générique est assez cool.
Il suffit de faire
et apprécie!
Vous le trouverez également sur GitHub .
la source
Avez-vous examiné ccze ? Vous avez la possibilité de personnaliser les couleurs par défaut de certains mots-clés à l'aide de l'option
-c
ou directement dans votre fichier de configuration. Si votre écran s'efface après la colorisation, vous devez utiliser l'option-A
.Modifier:
Si vous souhaitez vraiment que la ligne complète soit colorée en rouge, vous pouvez également essayer les éléments suivants:
\e[1;31m
vous donnera la couleur rouge. Si vous voulez un peu de jaune, l' utilisation\e[1;33m
, et pour une utilisation verte\e[1;32m
. Le\e[0m
restaure la couleur normale du texte.la source
\007
à la fin de la regex, comme suit:perl -pe 's/(ERROR)/\033[31m$1\033[0m\007/g;'
. Cela fonctionne très bien si vous utilisez tmux avecset -g bell-action any
. Dans ce cas, si votre journal se termine dans une autre fenêtre, ce nom de fenêtre alertera chaque fois que la regex trouvera une correspondance.Jetez un coup d’œil à lnav , l’afficheur avancé de fichiers journaux.
Il peut également imprimer divers formats.
Avant:
Après:
la source
Vous pouvez utiliser rainbow , qui colorise les lignes en fonction d'expressions régulières:
Il est également fourni avec des configurations prédéfinies , par exemple pour les journaux Tomcat:
(disclaimer: je suis l'auteur)
la source
rainbow
est génial. Es-tu l'auteur? Si oui, veuillez éditer votre réponse avec cette attribution.Vous pouvez utiliser colortail :
la source
apt install colortail
et cela devrait fonctionner sans la modification de ~ / .colortail /.Notez également que si vous voulez juste chercher une expression rationnelle correspondante, GNU grep
--color
fonctionnera - liez simplement votretail
sortie à travers cela.la source
grep -A9999 -B9999
regex
, toutes les lignes seront affichées sauf si vous avez 10 000 lignes non concordantes. Utilisez quelque chose commeGREP_COLORS="ms=31:sl=33:cx=32" grep -A9999 -B9999 SEVERE
pour afficher le motSEVERE
en rouge, le reste des lignes GRAVES en jaune et toutes les autres lignes (non GRAVES) (jusqu’à 9999) en vert.--color=always
à grep au lieu de juste--color
, en fonction de l'ordre de votre pipe, mais oui, cela fonctionne avec la version 8.27 (GNU coreutils) installée sur ma boîte.Pour obtenir une sortie colorée à partir de commandes standard
grep
, vous devez définir cecialias
dans votre.bashrc
quand vous grep quelque chose dans votre fichier vous voyez quelque chose comme ceci (mais probablement en rouge):
si vous voulez utiliser
tail
ouawk
et que la couleur reste dans un tube, l'alias ne suffit pas et vous devez utiliser le--color=always
paramètre, par exemple:Si vous voulez que le texte en couleur avec
awk
l'histoire soit un peu complexe mais plus puissant, par exemple:avec chaque ligne dans sa propre couleur.
Il existe de nombreuses autres manières d’obtenir un texte colorisé à partir d’un shell avec d’autres outils et ils sont bien décrits par les autres membres.
la source
J'aime assez colorex . Simple mais satisfaisant.
la source
Sur la base de la réponse @uloBasEI, j'ai essayé de l'utiliser
... | perl ... | perl ...
, mais le pipe Linux devient un peu fou et est trop lent. Si je mets toutes les règles dans une seuleperl
commande, cela fonctionne bien.Par exemple, créez un
perl
fichier colorTail.pl comme ci-dessous:Utilisez-le comme:
NOTE: vous pouvez aussi l'utiliser sur MobaXTerm ! Il suffit de télécharger le
perl
plug-in à partir du site MobaXTerm .la source
la source
source-highlight
n'est pas une commande largement installée, vous devriez donc au moins donner un lien vers le site du projet.Une solution qui fonctionne pour colorer toutes sortes de texte, et pas seulement les fichiers journaux, est un outil Python, " colout ".
Où tout texte dans la sortie de 'myprocess' qui correspond au groupe 1 de la regex sera coloré avec color1, le groupe 2 avec color2, etc.
Par exemple:
c'est-à-dire que le premier groupe de regex (parent) correspond à la date initiale dans le fichier journal, le deuxième groupe correspond au nom de fichier python, au numéro de ligne et au nom de la fonction, et le troisième groupe correspond au message de journal qui suit. Cela ressemble à:
Notez que les lignes ou parties de lignes qui ne correspondent à aucune de mes expressions rationnelles sont toujours répercutées. Ce n'est donc pas comme 'grep --color' - rien n'est filtré dans la sortie.
De toute évidence, cela est suffisamment flexible pour que vous puissiez l’utiliser avec n’importe quel processus, pas seulement avec les fichiers journaux. Habituellement, je crée simplement une nouvelle regex à la volée chaque fois que je veux coloriser quelque chose. Pour cette raison, je préfère colout à tout outil de coloration de fichier journal personnalisé, car je n'ai besoin d'apprendre qu'un seul outil, quel que soit le processus de coloration: journalisation, sortie de test, coloration syntaxique d'extraits de code dans le terminal, etc.
la source
Prise sans scrupule : j'ai écrit un outil appelé TxtStyle qui fait quelque chose de similaire aux options mentionnées précédemment. Vous pouvez l'exécuter comme suit:
Vous pouvez également définir des styles nommés dans le fichier de configuration (
~/.txts.conf
) et les utiliser comme suit:(le
ifconfig
style est défini hors de la boîte)la source
grc à coup sûr!
personnalisez vos collaborateurs avec regex dans le fichier: ~ .grc / conf.tail (ou le nom de votre choix)
ligne de commande:
résultats:
info pour configurer grc: https://github.com/manjuraj/config/blob/master/.grc/sample.conf
la source
J'ai écrit une fonction bash qui accepte jusqu'à trois paramètres et effectue un filtre de type grep sur un fichier texte et affiche le texte à l'écran en couleur.
J'aimerais aussi voir une fonction de queue qui ferait cela, mais je n'en ai pas encore trouvé.
Cette fonction peut également être améliorée - j'apprécierais toute aide sur la façon de l'améliorer.
la source
sûr !
J'ai longtemps écrit une fonction appelée "egrepi", basée sur les 8 définitions de variables de couleur. Cela fonctionne UNIQUEMENT comme une fonction colorée "tail -f".
1. setColors
tout d'abord, les variables de couleur doivent être appelées en premier:
2. egrepi
et la fonction egrepi, efficace et élégante: le cycle de couleur entre 8 couleurs ou plus (vos besoins) ET testé sous 3 systèmes d’exploitation unix différents, avec les commentaires suivants:
3. utilisation
commande | egrepi word1 .. wordN
la source
Vous voudrez peut-être aussi jeter un coup d'œil à lwatch :
tail -f /var/log/syslog | lwatch --input -
la source
En ce qui concerne les codes de couleur, j’utiliserais tput:
Voir pour référence:
man tput
Ensuite:
la source
Publie il y a quelque temps l'utilitaire Node Js - log-color-highlight
la source