Oglądam różne dzienniki
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
Jak mogę inaczej wydrukować dane wyjściowe każdego dziennika?
multitail
i odpowiedzi na to pytanie
Oglądam różne dzienniki
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
Jak mogę inaczej wydrukować dane wyjściowe każdego dziennika?
multitail
i odpowiedzi na to pytanie
Odpowiedzi:
Używanie GNU grep
do kolorowania:
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)
Zauważ, że pierwsze 2 są uruchamiane w tle. Oznacza to, że nie zostaną zabici, jeśli naciśniesz Ctrl-C(powłoka jawnie ignoruje SIGINT dla zadań asynchronicznych).
Aby temu zapobiec, możesz zamiast tego:
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
W ten sposób Ctrl-Costatni tail+grep
i cat
umierają (SIGINT), a pozostałe dwa ogony grep + umrą z SIGPIPE następnym razem, gdy coś napiszą.
Lub przywróć procedurę obsługi SIGINT (nie będzie działać ze wszystkimi powłokami):
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)
Możesz to również zrobić w color
funkcji. Nie dotyczy to tail
, ale tail
umrze z SIGPIPE następnym razem, gdy napisze, jeśli grep
umrze.
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)
Lub uczyń cały ogon + grep funkcją:
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
Lub cała sprawa:
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
funkcję, która działała najlepiej i wygląda najbardziej intuicyjnie w skrypcie.
Coś takiego działało dla mnie:
(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}')
Wyjaśnienie:
tail -f file
: dołączaj dane w miarę powiększania się plikuawk -W interactive
: ustaw awk
tryb interaktywny'{printf "\033[1;31m%s\033[0m\n", $0}'
wypisuje wyjście skolonizowane do terminala.\033[1;31m
oznacza czerwony\033[1;32m
oznacza zielony\033[1;34m
oznacza niebieski-W interactive
wydaje się być mawk
specyficzny. ( mawk
domyślnie sposób buforowania danych wejściowych jest unikalny i -W interactive
nie byłby potrzebny w innych awk
implementacjach).