Ich beobachte verschiedene Protokolle von
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
Wie kann ich die Ausgabe jedes Protokolls anders färben lassen?
multitail
und die Antworten in dieser Frage haben
Ich beobachte verschiedene Protokolle von
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
Wie kann ich die Ausgabe jedes Protokolls anders färben lassen?
multitail
und die Antworten in dieser Frage haben
Antworten:
Verwendung von GNU grep
für die Färbung:
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)
Beachten Sie, dass die ersten 2 im Hintergrund gestartet werden. Das bedeutet, dass sie nicht getötet werden, wenn Sie drücken Ctrl-C(Shell ignoriert SIGINT explizit für asynchrone Jobs).
Um dies zu verhindern, können Sie stattdessen Folgendes tun:
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
Auf diese Weise sterben Ctrl-Cdas letzte tail+grep
und das letzte und cat
die beiden anderen Grep + Tails eines Sigpipes, wenn sie das nächste Mal etwas schreiben.
Oder stellen Sie den SIGINT-Handler wieder her (funktioniert nicht mit allen 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)
Sie können dies auch in der color
Funktion tun . Das trifft nicht zu tail
, tail
stirbt aber beim nächsten Schreiben an einem Sigpipe, wenn es grep
stirbt.
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)
Oder machen Sie den ganzen Schwanz + grep zu einer Funktion:
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
Oder das Ganze:
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
Funktion entschieden, die am besten funktioniert und im Skript am intuitivsten aussieht.
So etwas hat bei mir funktioniert:
(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}')
Erläuterung:
tail -f file
: Daten anhängen, wenn die Datei wächstawk -W interactive
: awk
auf interaktiven Modus einstellen'{printf "\033[1;31m%s\033[0m\n", $0}'
Drucken Sie die Ausgabe farbig auf das Terminal.\033[1;31m
bedeutet rot\033[1;32m
bedeutet grün\033[1;34m
bedeutet blau-W interactive
scheint mawk
-spezifisch zu sein. (Die Art und Weise, in der mawk
die Eingabe gepuffert wird, ist ebenfalls eindeutig und wird -W interactive
in anderen awk
Implementierungen nicht benötigt. )