How to have tail -f show colored output
Try out multitail. This is an übergeneralization of tail -f
. You can watch multiple files in separate windows, highlight lines based on their content, and more.
multitail -c /path/to/log
The colors are configurable. If the default color scheme doesn't work for you, write your own in the config file. For example, call multitail -cS amir_log /path/to/log
with the following ~/.multitailrc
:
colorscheme:amir_log
cs_re:green:INFO
cs_re:red:SEVERE
Another solution, if you're on a server where it's inconvenient to install non-standard tools, is to combine tail -f
with sed or awk to add color selection control sequences. This requires tail -f
to flush its standard output without delay even when its standard output is a pipe, I don't know if all implementations do this.
tail -f /path/to/log | awk '
/INFO/ {print "\033[32m" $0 "\033[39m"}
/SEVERE/ {print "\033[31m" $0 "\033[39m"}
'
or with sed
tail -f /path/to/log | sed --unbuffered \
-e 's/\(.*INFO.*\)/\o033[32m\1\o033[39m/' \
-e 's/\(.*SEVERE.*\)/\o033[31m\1\o033[39m/'
If your sed isn't GNU sed, replace \o033
by a literal escape character and remove --unbuffered
.
Yet another possibility is to run tail -f
in an Emacs shell buffer and use Emacs's syntax coloring abilities.
grc, the generic colourizer is pretty cool.
apt-get install grc
Just do
grc tail -f /var/log/apache2/error.log
and enjoy!
You’ll also find it on GitHub.
Have you had a look at ccze? You have the possibility to customize the default colors of some keywords using the option -c
or directly in your configuration file. If your screen is clearing after colorizing you must use option -A
.
Edit:
If you really would like to have the complete line colored in red, you could also have a try at the following:
$ tail -f myfile.log | perl -pe 's/.*SEVERE.*/\e[1;31m$&\e[0m/g'
\e[1;31m
will give you the red color. If you would like some yellow, use \e[1;33m
, and for green use \e[1;32m
. The \e[0m
restores the normal text color.