为尾巴的不同来源着色

为尾巴的不同来源着色

我正在观看不同的日志

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

如何使每个日志的输出具有不同的颜色?

答案1

使用 GNUgrep进行着色:

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(shell 显式忽略异步作业的 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+grepcatdie (SIGINT 的)以及其他两个 grep+tail 将在下次写东西时死于 SIGPIPE。

或者恢复 SIGINT 处理程序(不适用于所有 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)

您也可以在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意味着蓝色

相关内容