Estou assistindo diferentes logs
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
Como posso ter a saída de cada log colorida de maneira diferente?
multitail
e as respostas nesta pergunta #
Estou assistindo diferentes logs
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
Como posso ter a saída de cada log colorida de maneira diferente?
multitail
e as respostas nesta pergunta #
Respostas:
Usando o GNU grep
para colorir:
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)
Observe que os dois primeiros são iniciados em segundo plano. Isso significa que eles não serão eliminados se você pressionar Ctrl-C(o shell ignora explicitamente o SIGINT para trabalhos assíncronos).
Para evitar isso, você pode fazer:
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
Dessa forma, após Ctrl-Co último tail+grep
e cat
morrer (do SIGINT) e os outros dois grep + caudas morrerão de um SIGPIPE na próxima vez que escreverem algo.
Ou restaure o manipulador SIGINT (não funcionará com todos os 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)
Você também pode fazer isso na color
função Isso não se aplica tail
, mas tail
morrerá de um SIGPIPE na próxima vez que ele gravar se grep
morrer.
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 crie uma função inteira + 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
Ou a coisa toda:
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
função que funcionou melhor e parece mais intuitiva no script.
Algo assim funcionou para mim:
(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}')
Explicação:
tail -f file
: acrescenta dados à medida que o arquivo cresceawk -W interactive
: definido awk
para o modo interativo'{printf "\033[1;31m%s\033[0m\n", $0}'
imprima a saída colorida no terminal.\033[1;31m
significa vermelho\033[1;32m
significa verde\033[1;34m
significa azul-W interactive
parece ser mawk
específico. (a maneira como mawk
sua entrada é armazenada em buffer por padrão também é exclusiva e -W interactive
não seria necessária em outras awk
implementações).