꼬리에 다른 소스를 색칠


19

나는 다른 로그를보고있다.

tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log

각 로그의 출력을 다르게 채색하려면 어떻게해야합니까?



@MattBianco 감사 multitail합니다.이 질문에 대한 답변과 답변을 드리겠습니다
Daniel W.

1
아래의 훌륭한 답변 외에도 출력 파일 색상 지정으로 더 많은 작업을 수행하는 방법을 보여주는 unix.stackexchange.com/questions/26313/colored-find-output 을 확인 하십시오.
Joe

답변:


21

grep채색에 GNU 사용 하기 :

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

이렇게 하면 SIGINT Ctrl-C의 마지막 tail+grepcat다이와 다른 두 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다음에 grep죽으면 SIGPIPE로 사망합니다.

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)

또는 전체 꼬리 + 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

이것을 "watch.sh"스크립트에 넣으면 콘솔로 돌아가지만 메시지가 인쇄됩니다. i.imgur.com/yaiBwMo.png
Daniel W.

@ Dan, 편집 참조
Stéphane Chazelas

이 답변을 작성해 주셔서 감사합니다 tailc. 가장 잘 작동하고 스크립트에서 가장 직관적으로 보이는 기능을 사용했습니다.
Daniel W.

4

이와 같은 Someting이 저에게 효과적이었습니다.

(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 interactivemawk특유의 것 같습니다 . ( mawk기본적으로 입력을 버퍼링 하는 방법 도 고유 -W interactive하며 다른 awk구현 에는 필요하지 않습니다 ).
Stéphane Chazelas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.