꼬리의 다양한 기원을 색칠하세요

꼬리의 다양한 기원을 색칠하세요

다양한 로그를 보고 있어요

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+grepcatdie와 다른 두 개의 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파란색을 의미

관련 정보