我希望能够跟踪包含如下消息的服务器日志文件的输出:
INFO
SEVERE
等等,如果是SEVERE
,则以红色显示该行;如果是INFO
,则为绿色。我可以为命令设置什么样的别名tail
来帮助我执行此操作?
答案1
试用多尾1.这是对 的超概括tail -f
。您可以在单独的窗口中观看多个文件,根据内容突出显示行等等。
multitail -c /path/to/log
颜色是可配置的。如果默认的配色方案不适合您,请在配置文件中编写您自己的配色方案。例如,multitail -cS amir_log /path/to/log
使用以下命令进行调用~/.multitailrc
:
colorscheme:amir_log
cs_re:green:INFO
cs_re:red:SEVERE
另一种解决方案,如果您所在的服务器不方便安装非标准工具,是与 sed 或 awk 结合使用tail -f
以添加颜色选择控制序列。这需要tail -f
立即刷新其标准输出,即使其标准输出是管道,我也不知道所有实现是否都这样做。
tail -f /path/to/log | awk '
/INFO/ {print "\033[32m" $0 "\033[39m"}
/SEVERE/ {print "\033[31m" $0 "\033[39m"}
'
或与sed
tail -f /path/to/log | sed --unbuffered \
-e 's/\(.*INFO.*\)/\o033[32m\1\o033[39m/' \
-e 's/\(.*SEVERE.*\)/\o033[31m\1\o033[39m/'
如果您的 sed 不是 GNU sed,请替换\o033
为文字转义字符并删除--unbuffered
.
另一种可能性是tail -f
运行Emacsshell 缓冲区并使用 Emacs 的语法着色功能。
答案2
答案3
你看过吗西泽?您可以使用选项-c
或直接在配置文件中自定义某些关键字的默认颜色。如果您的屏幕在着色后变清晰,则必须使用选项-A
。
编辑:
如果您确实希望将整条线涂成红色,您也可以尝试以下操作:
$ tail -f myfile.log | perl -pe 's/.*SEVERE.*/\e[1;31m$&\e[0m/g'
\e[1;31m
会给你红色。如果您想要一些黄色,请使用\e[1;33m
,如果您想要绿色,请使用\e[1;32m
。恢复\e[0m
正常的文本颜色。