Estoy viendo diferentes registros por
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
¿Cómo puedo tener la salida de cada registro coloreado de manera diferente?
multitail
y las respuestas en esta pregunta
Estoy viendo diferentes registros por
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
¿Cómo puedo tener la salida de cada registro coloreado de manera diferente?
multitail
y las respuestas en esta pregunta
Respuestas:
Usando GNU grep
para colorear:
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)
Tenga en cuenta que los primeros 2 se inician en segundo plano. Eso significa que no se eliminarán si presiona Ctrl-C(el shell ignora explícitamente SIGINT para trabajos asincrónicos).
Para evitar eso, puedes hacer lo siguiente:
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 esa manera, Ctrl-Cel último tail+grep
y el cat
dado (del SIGINT) y los otros dos grep + tails morirán de un SIGPIPE la próxima vez que escriban algo.
O restablezca el controlador SIGINT (no funcionará con todos los 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)
También puedes hacerlo en la color
función. Eso no se aplicará tail
, pero tail
morirá de un SIGPIPE la próxima vez que escriba si grep
muere.
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)
O haga que toda la cola + grep sea una función:
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 todo el asunto:
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
función que mejor funcionó y se ve más intuitiva en el script.
Algo como esto funcionó para mí:
(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}')
Explicación:
tail -f file
: agregar datos a medida que el archivo creceawk -W interactive
: establecer awk
en modo interactivo'{printf "\033[1;31m%s\033[0m\n", $0}'
imprime la salida coloreada en el terminal.\033[1;31m
significa rojo\033[1;32m
significa verde\033[1;34m
significa azul-W interactive
parece ser mawk
específico. (la forma en que mawk
almacena su entrada de forma predeterminada también es única, y -W interactive
no sería necesaria en otras awk
implementaciones).