Sto guardando diversi registri di
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
Come posso avere l'output di ciascun registro colorato in modo diverso?
multitail
e le risposte a questa domanda
Sto guardando diversi registri di
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
Come posso avere l'output di ciascun registro colorato in modo diverso?
multitail
e le risposte a questa domanda
Risposte:
Usare GNU grep
per la colorazione:
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)
Si noti che i primi 2 vengono avviati in background. Ciò significa che non verranno uccisi se si preme Ctrl-C(la shell ignora esplicitamente SIGINT per i lavori asincroni).
Per evitarlo, puoi invece fare:
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
In questo modo, dopo Ctrl-Cl'ultimo tail+grep
e il cat
morto (del SIGINT) e gli altri due grep + code moriranno di un SIGPIPE la prossima volta che scrivono qualcosa.
Oppure ripristina il gestore SIGINT (non funzionerà con tutte le shell):
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)
Puoi anche farlo nella color
funzione. Questo non si applica a tail
, ma tail
morirà di SIGPIPE la prossima volta che scrive se grep
muore.
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)
Oppure fai funzionare l'intera coda + grep:
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
O il tutto:
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
funzione che ha funzionato meglio e sembra più intuitiva nella sceneggiatura.
Qualcosa del genere ha funzionato per me:
(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}')
Spiegazione:
tail -f file
: aggiungi dati man mano che il file cresceawk -W interactive
: impostato awk
sulla modalità interattiva'{printf "\033[1;31m%s\033[0m\n", $0}'
stampa l'output colorizzato sul terminale.\033[1;31m
significa rosso\033[1;32m
significa verde\033[1;34m
significa blu-W interactive
sembra essere mawk
specifico. (anche il modo in cui mawk
memorizza il buffer per input è univoco e -W interactive
non sarebbe necessario in altre awk
implementazioni).