我希望能够跟踪包含以下消息的服务器日志文件的输出:

INFO
SEVERE


等,如果是SEVERE,则以红色显示该行;如果是INFO,则为绿色。我可以为tail命令设置什么样的别名来帮助我做到这一点?

评论

单行sed:stackoverflow.com/a/14691971/52074

#1 楼

尝试多尾。这是tail -f的übergeneralization。您可以在单独的窗口中观看多个文件,根据文件内容高亮显示行,等等。

multitail -c /path/to/log


颜色是可配置的。如果默认的配色方案不适合您,请在配置文件中编写自己的配色方案。例如,使用以下multitail -cS amir_log /path/to/log调用~/.multitailrc

colorscheme:amir_log
cs_re:green:INFO
cs_re:red:SEVERE


另一个解决方案,如果您在不方便安装非标准工具的服务器上,则可以结合使用tail -f使用sed或awk添加颜色选择控制序列。这要求tail -f即使标准输出是管道也要无延迟地刷新其标准输出,我不知道是否所有实现都这样做。



tail -f /path/to/log | awk '
  /INFO/ {print "3[32m" 
tail -f /path/to/log | sed --unbuffered \
    -e 's/\(.*INFO.*\)/\o033[32m\o033[39m/' \
    -e 's/\(.*SEVERE.*\)/\o033[31m\o033[39m/'
"3[39m"} /SEVERE/ {print "3[31m" q4312078q "3[39m"} '


如果您的sed不是GNU sed,请用文字转义字符替换\o033并删除--unbuffered。在Emacs Shell缓冲区中运行tail -f,并使用Emacs的语法着色功能。

评论


sed如何做到这一点? (对不起,我很懒,没有自己弄清楚!)但是您也可以添加一个sed示例。

–阿里
2011年11月28日在16:41

@Ali Sed不太方便,因为它没有转义字符的语法,您需要按原样在脚本中包含它,或者使用shell引用方法来使用它。我建议您使用awk。

–吉尔斯'所以-不再是邪恶的'
2011年11月28日在17:18

@Gilles在带有awk代码的尾部-f中,如果字符串没有INFO和SEVERE,则不会打印该字符串。如何打印其余的字符串? (字符串无需上色)

–本杰明
2012年6月29日10:32



@Benjamin添加;结束括号之前的下一个跳过进一步的处理,最后有一个新的处理行1 {print}(1表示始终)。

–吉尔斯'所以-不再是邪恶的'
2012年6月29日上午11:58

sed --unbuffered -e's /\(.* FATAL。* \)/ \ o033 [1; 31m \ 1 \ o033 [0; 39m /'-e's /\(.* ERROR。* \)/ \ o033 [31m \ 1 \ o033 [39m /'-e's /\(.* WARN。* \)/ \ o033 [33m \ 1 \ o033 [39m /'-e's /\(.* INFO。 * \)/ \ o033 [32m \ 1 \ o033 [39m /'-e's /\(.* DEBUG。* \)/ \ o033 [34m \ 1 \ o033 [39m /'-e's / \( 。* TRACE。* \)/ \ o033 [30m \ 1 \ o033 [39m /'-e's / \(。* [Ee] xception。* \)/ \ o033 [1; 39m \ 1 \ o033 [0 ; 39m /'

–德米特里·桑达洛夫(DmitrySandalov)
18年9月7日在15:07

#2 楼

grc,通用着色剂非常酷。

/>
您还将在GitHub上找到它。

评论


这正是我所需要的:轻巧而简单。颜色并不完全适合我的日志类型(自定义日志),但是任何颜色都使我更容易遵循日志。

– rennat
2011-10-21 19:49

对我来说,在Debian错误上出现“ grc”错误是:OSError:[Errno 13]权限被拒绝。另外,它还取决于要安装的Python,因此除非您已经拥有Python,否则它并不是轻量级的。我发现“ ccze”工作得更好,例如。 'tail -f -n 50 /var/log/starbound-server.log | ccze -A'。

–丹尼尔·索科洛夫斯基
2013年12月9日在3:56



Ubuntu的grc默认设置对syslog或mail.log的显示效果不好。不容易理解如何对其进行自定义。

–lepe
2014年1月27日,下午3:34

我发现它比多尾色更容易上色。刚刚通过源代码在我的CentOS系统上进行了快速安装,并改善了我的生活。也将安装在我的其他系统上。

– Zeeshan
2014年7月12日在9:51



这在nginx日志上看起来非常糟糕i.imgur.com/aJbIOfL.png

– mpen
2014年9月3日,下午2:34

#3 楼

您看过ccze吗?您可以使用选项-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恢复正常的文本颜色。

评论


这在Mac上不起作用-我赞成它,因为它在Linux上有效。

–阿米尔·阿富汗尼
2011年3月1日21:33

支持,因为虽然可能没有perl / ansi技巧,但ccze却做到了。

– Shadur
2011年11月13日在16:02

您还可以通过在正则表达式的末尾添加\ 007来使终端发送警报或“提示音”,如下所示:perl -pe's /(ERROR)/ \ 033 [31m $ 1 \ 033 [0m \ 007 / g ;'。如果将tmux与set -g bell-action any一起使用,则此功能很棒,在这种情况下,如果将日志尾部放在另一个窗口中,则只要正则表达式找到匹配项,该窗口名称就会发出警报。

– J.C. Yamokoski
2012年11月13日下午4:15

@AmirAfghani这是linux / unix SE网站,因此我不确定为什么您认为它可以在mac上运行。

–BЈовић
2013年6月4日下午6:06

@BЈовићMac是Unix。

–克里斯唐(Chris Down)
2013年9月12日19:16

#4 楼

看看高级日志文件查看器lnav。



它也可以打印各种格式。

之前:



之后:



评论


日志分析工具套件的补充非常酷。谢谢你的建议。

– Athoxx
19年8月22日在10:51

谢谢@bagonyi,它确实是一个很棒的工具。它提供了使用SQL语句(例如syslog_log中的select log_time,log_level,log_body)的查询工具,其中log_body如'%CPU%'

– campisano
20年8月29日在17:49

#5 楼

您可以使用rainbow,它根据正则表达式为行着色:

rainbow --red='SEVERE.*' --green='INFO.*' tail -f my-file.log


它也与预定义的配置捆绑在一起,例如用于Tomcat日志:

rainbow --config=tomcat tail -f my-file.log


(免责声明:我是作者)

评论


我尝试了针对该问题的大多数其他解决方案,但是Rainbow是唯一在sun,aix,linux,termux,darwin和cygwin上工作得很好的解决方案-我每天使用6(!)环境。所有其他方面都涉及至少某些平台的困难的非便携式构建过程。

–稳定狗
17年5月17日在15:15



彩虹很棒。你是作者吗?如果是这样,请编辑带有该属性的答案。

–主教
19/09/19 '16:56

是的,抱歉,已编辑

–nicoulaj
19-09-20在17:22

#6 楼

您可以使用colortail:

colortail -f /var/log/messages


评论


+1在Ubuntu存储库中可用。与ccze相比,我喜欢colortail的是,您可以使用RegEx自由自定义样式。可用颜色:黑色,亮黑色,白色,亮白色,品红色,亮品红色,青色,亮青色,绿色,‌鲜绿色,黄色,亮黄色,红色,亮红色,蓝色,亮蓝色。不幸的是,没有办法设置粗体或其他颜色,例如橙色。

–lepe
2014-1-27的3:55



我想更正一下我以前的评论:“明亮” +颜色包括“粗体”(某些颜色实际上也会看起来更亮)

–lepe
2014年1月27日4:25



我在Ubuntu 18上尝试了此操作,但没有成功。该设置是多步骤的,并且说明不明确。仍然不确定那是我犯错的部分;最后一部分可以变得更清晰“之后,您可能需要将示例配置文件复制并编辑到其他位置。我将它们放在〜/ .colortail /中”

–达伍德吉
19年5月5日,11:19



只需安装colortail,即可安装colortail,它也无需编辑〜/ .colortail /也可以工作。

– Kartik M
19年5月6日在12:05



#7 楼

还要注意,如果您只想查找一个匹配的正则表达式,则带有--color的GNU grep将起作用—只需将tail的输出通过该管道传送即可。

评论


OP仅想突出显示输出,而不是对其进行过滤。 Grep不会显示不匹配的行...

–编码器
2014年6月30日12:36

如果您说grep -A9999 -B9999 regex,它将显示所有行,除非您连续有10,000条不匹配的行。使用类似GREP_COLORS =“ ms = 31:sl = 33:cx = 32”的命令grep -A9999 -B9999 SEVERE以红色显示单词SEVERE,其余以黄色显示SEVERE行,以及所有其他(非严重)行(最高9999)为绿色。

– G-Man说“恢复莫妮卡”
2015年8月7日在2:45



您可能需要将--color = always传递给grep而不是仅仅传递--color,这取决于管道的顺序,但是是的,这可以在我的盒子上安装tail(GNU coreutils)8.27。

–汉克·舒尔茨(Hank Schultz)
18年7月2日在15:26



#8 楼

要从grep之类的标准命令获取彩色输出,应该在alias中设置此.bashrc
可能是红色):



# User specific aliases and functions
alias grep='grep --color=auto'



如果要使用tailawk并希望颜色能保留到管道中,则别名是不够的,您应该使用--color=always参数,例如:



[root@linuxbox mydir]# grep "\(INFO\|SEVERE\)" /var/log/logname
this entry is an INFO 
SEVERE this entry is a warn!
this entry is an INFO
this entry is an INFO
SEVERE this entry is a warn!



如果需要带有awk的彩色文本故事有点复杂,但是功能更强大,例如:



[root@linubox mydir]# grep --color=always "\(INFO\|SEVERE\)" /var/log/logname | tail -f | awk '{ print  }'
this 
SEVERE
this
this
SEVERE
每行每行

还有许多其他方法可以使用其他工具从shell中获取彩色文本,并且其他成员对此也有很好的描述。

评论


这次真是万分感谢。我已经知道grep --color对我来说是最简单,最好的选择,但是我在使用它和管道时遇到了麻烦。我不知道总是指定color =会做到!太棒了,我非常感谢。这是此页面上最适合我的解决方案。

–ctrlbrk
20-04-12在18:43

#9 楼

我很喜欢colorex。简单但令人满意。

tail -f /var/log/syslog | colorex -G '[0-9]{2}:[0-9]{2}:[0-9]{2}' -b $(hostname)


评论


这么简单吗?

–伊莱兰·马尔卡(Eliran Malka)
15年4月13日在10:40

#10 楼

基于@uloBasEI答案,我尝试使用... | perl ... | perl ...,但是Linux管道有点发疯并且太慢。如果仅将所有规则放在一个perl命令中,它就可以正常工作。

例如,创建一个perl文件colorTail.pl,如下所示:

#!/usr/bin/perl -w

while(<STDIN>) {
    my $line = $_;
    chomp($line);
    for($line){
        s/==>.*<==/\e[1;44m$&\e[0m/gi; #tail multiples files name in blue background
        s/.*exception.*|at .*/\e[0;31m$&\e[0m/gi;  #java errors & stacktraces in red
        s/info.*/\e[1;32m$&\e[0m/gi; #info replacement in green
        s/warning.*/\e[1;33m$&\e[0m/gi; #warning replacement in yellow
    }
    print $line, "\n";
}


用作:

tail -f *.log | perl colorTail.pl
tail -f *.log -f **/*.log | perl colorTail.pl


注意:您也可以在MobaXTerm上使用它!只需从MobaXTerm网站下载perl插件即可。

#11 楼

tail -f /var/log/logname | source-highlight -f esc -s log


评论


source-highlight不是一个广泛安装的命令,因此您至少应提供一个指向项目站点的链接。

–吉尔斯'所以-不再是邪恶的'
2011-3-16在22:45

在Fedora 19中可用。

– sjas
2013年9月29日下午14:55

和Ubuntu 12.10。

– sjas
2013年9月29日15:10

看起来很好。与该列表中的其他文件相比,它是一个很大的文件包(26MB)。它支持多种语言。可以对它进行自定义,修改位于/usr/share/source-highlight/*.lang(Ubuntu)的配置文件。如果您需要简单的东西,请使用ccze或colortail。

–lepe
2014-1-27的3:46



看起来它取决于增强,大约462MB

–ecsos
14年5月29日在21:34



#12 楼

一种适用于为各种文本(不仅是日志文件)着色的解决方案是Python工具'colout'。

pip install colout
myprocess | colout REGEX_WITH_GROUPS color1,color2... [attr1,attr2...]


其中'myprocess'输出中的任何文本与正则表达式的第1组匹配的'将用color1着色,第2组将用color2着色,等等。

例如:

tail -f /var/log/mylogfile | colout '^(\w+ \d+ [\d:]+)|(\w+\.py:\d+ .+\(\)): (.+)$' white,black,cyan bold,bold,normal


ie第一个正则表达式组(括号)与日志文件中的初始日期匹配,第二个正则表达式组与python文件名,行号和函数名匹配,而第三组与之后的日志消息匹配。看起来像:



请注意,与我的任何正则表达式都不匹配的行或部分行仍在回显,因此这与'grep- -color'-没有任何内容会从输出中过滤出来。

显然,它足够灵活,可以将其用于任何进程,而不仅仅是尾随日志文件。我通常在想着色任何东西时,随时随地快速制作一个新的正则表达式。出于这个原因,我更喜欢colout而不是任何自定义日志文件着色工具,因为无论我要着色什么,我都只需要学习一种工具:日志记录,测试输出,终端中代码的语法高亮片段等。 />

评论


我还没有一个答案可以修改源日志文件

–Dani_l
17年12月7日在15:38

@Dani_l对了!在撰写本文时,我一定是在这个问题和类似的问题之间来回切换,这使我很困惑,许多答案都与如何配置日志记录有关,以便将ANSI字符直接写入日志文件本身。我将从答复中删除该投诉。

–乔纳森·哈特利
17年12月7日在17:10

#13 楼

无耻的插件:我编写了一个名为TxtStyle的工具,该工具的功能与前面提到的选项相似。您可以按以下方式运行它:

tail -f /var/log/syslog | txts --regex '\d+'


还可以在配置文件(~/.txts.conf)中定义命名样式,并按如下方式使用它:

ifconfig | txts --name ifconfig


ifconfig样式是开箱即用的定义)

#14 楼

肯定要用grc! />命令行:

regexp=.*(select .*)$
colours=unchanged,cyan
=====
regexp=.*(update .*)$
colours=unchanged,bold yellow
=====
regexp=.*(insert .*)$
colours=unchanged,bold yellow
=====
regexp=.*(emp=\d+).*
colours=unchanged,reverse green
=====
regexp=.*http.*/rest/contahub.cmds.(.*?)/(\w*).*$
colours=unchanged,green,magenta
=====
regexp=.*http.*/M/.*\.(.*?Facade)/(\w*).*$
colours=unchanged,underline green,underline magenta


结果:


用于配置grc的信息:
https:// github.com/manjuraj/config/blob/master/.grc/sample.conf

#15 楼

至于颜色代码,我将使用tput:

red=$( tput -Txterm setaf 1 )
norm=$( tput -Txterm sgr0 )
bold=$( tput -Txterm bold )


参考资料:man tput

然后:

tail -F myfile.log | sed "s/\(.ERROR.*\)/$red$bold$norm/g"


评论


万分感谢。具有标准外壳功能,就像魅力一样。

– vquintans
18年7月13日在8:56



#16 楼

我编写了一个bash函数,该函数最多接受三个参数,并在文本文件上执行类似grep的过滤器,然后将文本输出为彩色。

我还希望看到一个tail函数,该函数可以可以做到这一点,但还没有找到。

还可以改进此功能-感谢您提供任何有关如何使其更好的帮助。 br />

#17 楼

肯定!

我根据8个颜色变量定义编写了一个名为“ egrepi”的函数,很长一段时间。
这只能像“ tail -f”彩色函数那样通过管道传递。 />
1。 setColors

首先,首先要调用颜色变量的功能:


setColors ()
{
set -a
which printf >/dev/null 2>&1 && print=printf || print=print # Mandriva doesn't know about printf

hide='eval tput civis'
show='eval tput cnorm'
CLS=$(tput clear)
bel=$(tput bel)

case ${UNAME} in
AIX)
# text / foreground
N=$(${print} '3[1;30m')
n=$(${print} '3[0;30m')
R=$(${print} '3[1;31m')
r=$(${print} '3[0;31m')
G=$(${print} '3[1;32m')
g=$(${print} '3[0;32m')
Y=$(${print} '3[1;33m')
y=$(${print} '3[0;33m')
B=$(${print} '3[1;34m')
b=$(${print} '3[0;34m')
M=$(${print} '3[1;35m')
m=$(${print} '3[0;35m')
C=$(${print} '3[1;36m')
c=$(${print} '3[0;36m')
W=$(${print} '3[1;37m')
w=$(${print} '3[0;37m')
END=$(${print} '3[0m')

# background
RN=$(${print} '3[6;40m')
Rn=$(${print} '3[40m')
RR=$(${print} '3[6;41m')
Rr=$(${print} '3[41m')
RG=$(${print} '3[6;42m')
Rg=$(${print} '3[42m')
RY=$(${print} '3[6;43m')
Ry=$(${print} '3[43m')
RB=$(${print} '3[6;44m')
Rb=$(${print} '3[44m')
RM=$(${print} '3[6;45m')
Rm=$(${print} '3[45m')
RC=$(${print} '3[6;46m')
Rc=$(${print} '3[46m')
RW=$(${print} '3[6;47m')
Rw=$(${print} '3[47m')

HIGH=$(tput bold)
SMUL=$(tput smul)
RMUL=$(tput rmul)
BLINK=$(tput blink)
REVERSE=$(tput smso)
REVERSO=$(tput rmso)
;;
*)
# text / foreground
n=$(tput setaf 0)
r=$(tput setaf 1)
g=$(tput setaf 2)
y=$(tput setaf 3)
b=$(tput setaf 4)
m=$(tput setaf 5)
c=$(tput setaf 6)
w=$(tput setaf 7)
N=$(tput setaf 8)
R=$(tput setaf 9)
G=$(tput setaf 10)
Y=$(tput setaf 11)
B=$(tput setaf 12)
M=$(tput setaf 13)
C=$(tput setaf 14)
W=$(tput setaf 15)
END=$(tput sgr0)

HIGH=$(tput bold)
SMUL=$(tput smul)
RMUL=$(tput rmul)
BLINK=$(tput blink)
REVERSE=$(tput smso)
REVERSO=$(tput rmso)

# background
Rn=$(tput setab 0)
Rr=$(tput setab 1)
Rg=$(tput setab 2)
Ry=$(tput setab 3)
Rb=$(tput setab 4)
Rm=$(tput setab 5)
Rc=$(tput setab 6)
Rw=$(tput setab 7)
RN=$(tput setab 8)
RR=$(tput setab 9)
RG=$(tput setab 10)
RY=$(tput setab 11)
RB=$(tput setab 12)
RM=$(tput setab 13)
RC=$(tput setab 14)
RW=$(tput setab 15)
;;
esac

BLUEf=${B}
BLUE=${b}
REDf=${R}
RED=${r}
GREENf=${G}
GREEN=${g}
YELLOWf=${Y}
YELLOW=${y}
MANGENTAf=${M}
MANGENTA=${m}
WHITEf=${W}
WHITE=${w}
CYANf=${C}
CYAN=${c}

OK="${RG}${n}OK${END}"
KO="${RR}${n}KO${END}"
NA="${N}NA${END}"

COLORIZE='eval sed -e "s/{END}/${END}/g" -e "s/{HIGH}/${HIGH}/g" -e "s/{SMUL}/${SMUL}/g" -e "s/{RMUL}/${RMUL}/g" -e "s/{BLINK}/${BLINK}/g" -e "s/{REVERSE}/${REVERSE}/g" -e "s/{REVERSO}/${REVERSO}/g"'
LOWS=' -e "s/{n}/${n}/g" -e "s/{r}/${r}/g" -e "s/{g}/${g}/g" -e "s/{y}/${y}/g" -e "s/{b}/${b}/g" -e "s/{m}/${m}/g" -e "s/{c}/${c}/g" -e "s/{w}/${w}/g"'
HIGHS=' -e "s/{N}/${N}/g" -e "s/{R}/${R}/g" -e "s/{G}/${G}/g" -e "s/{Y}/${Y}/g" -e "s/{B}/${B}/g" -e "s/{M}/${M}/g" -e "s/{C}/${C}/g" -e "s/{W}/${W}/g"'
REVLOWS=' -e "s/{Rn}/${Rn}/g" -e "s/{Rr}/${Rr}/g" -e "s/{Rg}/${Rg}/g" -e "s/{Ry}/${Ry}/g" -e "s/{Rb}/${Rb}/g" -e "s/{Rm}/${Rm}/g" -e "s/{Rc}/${Rc}/g" -e "s/{Rw}/${Rw}/g"'
REVHIGHS=' -e "s/{RN}/${RN}/g" -e "s/{RR}/${RR}/g" -e "s/{RG}/${RG}/g" -e "s/{RY}/${RY}/g" -e "s/{RB}/${RB}/g" -e "s/{RM}/${RM}/g" -e "s/{RC}/${RC}/g" -e "s/{RW}/${RW}/g"'
# COLORIZE Usage:
# command |${COLORIZE} ${LOWS} ${HIGHS} ${REVLOWS} ${REVHIGHS}

set +a
}


2。 egrepi

和egrepi功能,有效而优雅:在8种或更多颜色(您的需要)之间进行颜色循环,并在3种不同的unix操作系统下进行了测试,并带有注释:

br />
3。用法

命令| egrepi word1 .. wordN

#18 楼

您可能还想看看lwatch:

tail -f /var/log/syslog | lwatch --input -

#19 楼

前一段时间发布的Node Js实用程序-log-color-highlight

tail -f file | lch -red error warn -green success
lch -f file -red.bold error warn -underline.bgGreen success


#20 楼

适用于Centos

yum install -y ccze
tail -f /var/log/file.log | ccze -A


评论


仅供参考,将ccze软件包从centos 8 epel repo中删除。

–阿基尔·贾拉格姆(Akhil Jalagam)
20年9月1日在15:57

#21 楼

基于@this帖子,我创建了一个解决方案,该解决方案显示了来自多个日志文件的动态尾部输出,并返回彩色警告和错误消息,如下所示:
tail -f -n 5 application.log debug.log| perl -pe 's#WARNING#\x1b[33m$&#; s#ERROR#\x1b[31m$&#; s#foo#\x1b[32m$&#' 

无需安装。希望这对某人有帮助。