Я переглядаю різні журнали
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
Як я можу мати вихід кожного журналу кольором по-різному?
multitail
і відповіді на це запитання
Я переглядаю різні журнали
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
Як я можу мати вихід кожного журналу кольором по-різному?
multitail
і відповіді на це запитання
Відповіді:
Використання GNU grep
для фарбування:
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)
Зауважте, що перші 2 запускаються у фоновому режимі. Це означає, що вони не будуть вбиті, якщо натиснути Ctrl-C(оболонка явно ігнорує SIGINT для асинхронних завдань).
Щоб цього не допустити, ви можете зробити:
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
Таким чином, при Ctrl-Cостанньому tail+grep
і cat
вмиранні (ЗНАКУ) та двох інших греп + хвіст відмирають від ЗНАЧЕННЯ наступного разу, коли вони щось напишуть.
Або відновіть обробник SIGINT (не працюватиме з усіма оболонками):
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)
Ви також можете це зробити у color
функції. Це не стосується tail
, але tail
помре від ПІДПРИЄМЦЯ наступного разу, коли він напише, якщо grep
помирає.
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)
Або зробіть цілий хвіст + греп функцією:
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
Або вся справа:
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
функцією, яка найкраще працювала і виглядає найбільш інтуїтивно зрозумілою в сценарії.
Щось так працювало для мене:
(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}')
Пояснення:
tail -f file
: додавання даних у міру зростання файлуawk -W interactive
: встановлено awk
в інтерактивному режимі'{printf "\033[1;31m%s\033[0m\n", $0}'
вивести кольоровий вивід у термінал.\033[1;31m
означає червоний\033[1;32m
означає зелений\033[1;34m
означає синій-W interactive
здається, mawk
-специфічним. (спосіб mawk
буферизації його даних за замовчуванням також унікальний і -W interactive
не потребує інших awk
реалізацій).