Saya menonton log yang berbeda
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
Bagaimana saya bisa membuat output setiap log berwarna berbeda?
multitail
dan jawaban dalam pertanyaan ini
Saya menonton log yang berbeda
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
Bagaimana saya bisa membuat output setiap log berwarna berbeda?
multitail
dan jawaban dalam pertanyaan ini
Jawaban:
Menggunakan GNU grep
untuk pewarnaan:
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)
Perhatikan bahwa 2 yang pertama dimulai di latar belakang. Itu berarti mereka tidak akan dibunuh jika Anda menekan Ctrl-C(shell secara eksplisit mengabaikan SIGINT untuk pekerjaan asinkron).
Untuk mencegahnya, Anda bisa melakukannya:
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
Dengan begitu, setelah Ctrl-C, yang terakhir tail+grep
dan cat
mati (dari SIGINT) dan dua ekor grep + lainnya akan mati karena SIGPIPE pada saat mereka menulis sesuatu.
Atau kembalikan handler SIGINT (tidak akan bekerja dengan semua 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)
Anda juga dapat melakukannya di color
fungsi. Itu tidak berlaku untuk tail
, tetapi tail
akan mati karena SIGPIPE saat berikutnya ia menulis jika grep
mati.
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)
Atau jadikan seluruh ekor + grep fungsi:
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
Atau semuanya:
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
fungsi yang bekerja paling baik dan terlihat paling intuitif dalam skrip.
Sesuatu seperti ini bekerja untuk saya:
(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}')
Penjelasan:
tail -f file
: tambahkan data saat file bertambahawk -W interactive
: diatur awk
ke mode interaktif'{printf "\033[1;31m%s\033[0m\n", $0}'
cetak output yang dizinkan ke terminal.\033[1;31m
berarti merah\033[1;32m
berarti hijau\033[1;34m
artinya biru-W interactive
tampaknya menjadi- mawk
spesifik. (cara mawk
buffer inputnya secara default juga unik, dan -W interactive
tidak akan diperlukan dalam awk
implementasi lain ).