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?
multitailvà 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?
multitailvà 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+grepvà catchế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 colorchức năng. Điều đó sẽ không áp dụng cho tail, nhưng tailsẽ chết vì SIGPIPE vào lần tiếp theo khi nó viết nếu grepchế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
tailcchứ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 awkchế độ 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 interactivedường như là đặc mawkthù (cách mawkbộ đệm đầu vào của nó theo mặc định cũng là duy nhất và -W interactivesẽ không cần thiết trong các awktriển khai khác ).