web-dev-qa-db-ja.com

尾の異なるソースを着色する

私は別のログを見ています

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

各ログの出力に異なる色を付けるにはどうすればよいですか?

19
Daniel W.

色付けに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つはバックグラウンドで開始されることに注意してください。つまり、あなたが押しても殺されないということです 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

そのように、 Ctrl-C、 最後 tail+grepおよびcatダイ(SIGINTの)と他の2つのgrep + tailsは、次に何かを書き込むときに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)

または、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
21

このようなことは私にとってうまくいきました:

(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 interactiveawkをインタラクティブモードに設定
  • '{printf "\033[1;31m%s\033[0m\n", $0}'出力をカラー化して端末に出力します。
  • \033[1;31mは赤を意味します
  • \033[1;32mは緑を意味します
  • \033[1;34mは青を意味します
4
chaos