为尾巴上色不同的来源


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,其中显示了如何对输出文件进行着色。
2014年

Answers:


21

使用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)

请注意,前两个是在后台启动的。这意味着如果您按它们,它们将不会被杀死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

这样一来,(SIGINT的)Ctrl-C最后一个tail+grepcat死亡,以及其他两个grep + tails在下一次写东西时将因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如果SIGPIPE在下次写入时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

当我将其放入“ watch.sh”脚本时,它返回到控制台,但打印了消息,请参阅i.imgur.com/yaiBwMo.png
Daniel W.

@丹,看到编辑
斯特凡Chazelas

感谢您在编写此答案时所付出的努力,我使用了tailc在脚本中效果最好,看起来最直观的功能。
Daniel W.

4

这样的事情对我有用:

(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 interactive似乎是mawk特定的。(mawk默认情况下,缓冲其输入的方式也是唯一的,-W interactive在其他awk实现中将不需要)。
斯特凡Chazelas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.