다양한 로그를 보고 있어요
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
각 로그의 출력을 다른 색상으로 만들려면 어떻게 해야 합니까?
답변1
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개는 백그라운드에서 실행됩니다. 즉, SIGINT를 누르면 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
이런 식으로 SIGINT의 Ctrl-C마지막 하나 tail+grep
와 cat
die와 다른 두 개의 grep+tail은 다음에 무언가를 쓸 때 SIGPIPE에서 죽게 됩니다.
또는 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
에 if가 작성되면 SIGPIPE와 함께 종료됩니다 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)
또는 전체 tail+grep을 함수로 만듭니다.
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
답변2
다음과 같은 것이 나에게 효과적입니다.
(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
파란색을 의미