Je regarde différents journaux par
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
Comment puis-je colorer différemment la sortie de chaque journal?
multitail
et les réponses à cette question
Je regarde différents journaux par
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
Comment puis-je colorer différemment la sortie de chaque journal?
multitail
et les réponses à cette question
Réponses:
Utiliser GNU grep
pour la coloration:
color() { GREP_COLOR=$1 grep --color '.*'; }
(tail -qf /var/log/syslog | color 31 &
tail -qf /var/log/fail2ban.log | color 32 &
tail -qf /var/log/nginx/error.log | color 33)
Notez que les 2 premiers sont démarrés en arrière-plan. Cela signifie qu'ils ne seront pas tués si vous appuyez sur Ctrl-C(le shell ignore explicitement SIGINT pour les travaux asynchrones).
Pour éviter cela, vous pouvez faire à la place:
color() { GREP_COLOR=$1 grep --line-buffered --color=always '.*'; }
(tail -qf /var/log/syslog | color 31 &
tail -qf /var/log/fail2ban.log | color 32 &
tail -qf /var/log/nginx/error.log | color 33) | cat
De cette façon, Ctrl-Cle dernier tail+grep
et le dernier cat
(du SIGINT) et les deux autres queues grep + mourront d'un SIGPIPE la prochaine fois qu'ils écrivent quelque chose.
Ou restaurez le gestionnaire SIGINT (ne fonctionnera pas avec tous les shells):
color() { GREP_COLOR=$1 grep --color '.*'; }
((trap - INT; tail -qf /var/log/syslog | color 31) &
(trap - INT; tail -qf /var/log/fail2ban.log | color 32) &
tail -qf /var/log/nginx/error.log | color 33)
Vous pouvez également le faire dans la color
fonction. Cela ne s'appliquera pas tail
, mais tail
mourra d'un SIGPIPE la prochaine fois qu'il écrit s'il grep
meurt.
color() (trap - INT; GREP_COLOR=$1 exec grep --color '.*')
(tail -qf /var/log/syslog | color 31 &
tail -qf /var/log/fail2ban.log | color 32 &
tail -qf /var/log/nginx/error.log | color 33)
Ou faites de l'ensemble queue + grep une fonction:
tailc() (trap - INT; export GREP_COLOR="$1"; shift; tail -qf -- "$@" |
grep --color '.*')
tailc 31 /var/log/syslog &
tailc 32 /var/log/syslog &
tailc 33 /var/log/nginx/error.log
Ou le tout:
tailc() (
while [ "$#" -ge 2 ]; do
(trap - INT; tail -f -- "$2" | GREP_COLOR=$1 grep --color '.*') &
shift 2
done
wait
)
tailc 31 /var/log/syslog 32 /var/log/syslog 33 /var/log/nginx/error.log
tailc
fonction qui fonctionnait le mieux et qui semble la plus intuitive dans le script.
Quelque chose comme ça a fonctionné pour moi:
(tail -f /var/log/syslog | awk -W interactive '{printf "\033[1;31m%s\033[0m\n", $0}' & \
tail -f /var/log/auth.log | awk -W interactive '{printf "\033[1;32m%s\033[0m\n", $0}' & \
tail -f /var/log/Xorg.0.log | awk -W interactive '{printf "\033[1;34m%s\033[0m\n", $0}')
Explication:
tail -f file
: ajouter des données à mesure que le fichier granditawk -W interactive
: passer awk
en mode interactif'{printf "\033[1;31m%s\033[0m\n", $0}'
imprimer la sortie colorisée sur le terminal.\033[1;31m
signifie rouge\033[1;32m
signifie vert\033[1;34m
signifie bleu-W interactive
semble être mawk
spécifique. (la façon dont la mawk
mémoire tampon de son entrée par défaut est également unique et -W interactive
ne serait pas nécessaire dans d'autres awk
implémentations).