Tôi đang xem các bản ghi khác nhau bằng cách
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
Làm thế nào tôi có thể có đầu ra của mỗi bản ghi màu khác nhau?
multitail
và câu trả lời trong câu hỏi này
Tôi đang xem các bản ghi khác nhau bằng cách
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
Làm thế nào tôi có thể có đầu ra của mỗi bản ghi màu khác nhau?
multitail
và câu trả lời trong câu hỏi này
Câu trả lời:
Sử dụng GNU grep
để tô màu:
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)
Lưu ý rằng 2 đầu tiên được bắt đầu trong nền. Điều đó có nghĩa là họ sẽ không bị giết nếu bạn nhấn Ctrl-C(shell rõ ràng bỏ qua SIGINT cho các công việc không đồng bộ).
Để ngăn chặn điều đó, bạn có thể làm thay thế:
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
Theo cách đó, khi Ctrl-Ccuối cùng tail+grep
và cat
chết (của SIGINT) và hai grep + đuôi khác sẽ chết vì một SIGPIPE vào lần tiếp theo họ viết một cái gì đó.
Hoặc khôi phục trình xử lý SIGINT (sẽ không hoạt động với tất cả các 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)
Bạn cũng có thể làm điều đó trong color
chức năng. Điều đó sẽ không áp dụng cho tail
, nhưng tail
sẽ chết vì SIGPIPE vào lần tiếp theo khi nó viết nếu grep
chết.
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)
Hoặc làm cho toàn bộ đuôi + grep một hàm:
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
Hoặc toàn bộ:
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
chức năng hoạt động tốt nhất và trông trực quan nhất trong kịch bản.
Một cái gì đó như thế này làm việc cho tôi:
(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}')
Giải trình:
tail -f file
: chắp thêm dữ liệu khi tệp phát triểnawk -W interactive
: đặt thành awk
chế độ tương tác'{printf "\033[1;31m%s\033[0m\n", $0}'
in đầu ra colorzized đến thiết bị đầu cuối.\033[1;31m
có nghĩa là màu đỏ\033[1;32m
có nghĩa là màu xanh lá cây\033[1;34m
có nghĩa là màu xanh-W interactive
dường như là đặc mawk
thù (cách mawk
bộ đệm đầu vào của nó theo mặc định cũng là duy nhất và -W interactive
sẽ không cần thiết trong các awk
triển khai khác ).