Colorize log output with ack
Adding color to log files makes them a lot easier to understand, especially when tailing them. That’s why tools like MultiTail were created, and some logging tools can output in color. Last night I realized color could be added to any log file using ack, an awesome grep replacement that I recently found.
For example, to make 404s red in a standard Apache access log:
$ tail -f /var/log/apache2/access.log \
| ack --passthru --color-match=red "^.* 404 .*$"
The --passthru
option makes it so no lines are discarded. You can use multiple colors by piping the output through ack
multiple times. The --flush
option is needed to prevent pipe buffering issues and the --color
option is needed to pass colors through. Here’s an example:
$ tail -f /var/log/apache2/access.log \
| ack --flush --passthru --color --color-match=green "^.* 200 .*" \
| ack --flush --passthru --color --color-match=yellow "^.* 302 .*" \
| ack --flush --passthru --color --color-match=red "^.* 404 .*"
You can use more complex colors like --color="white on_red"
to make errors stand out even more.
I wonder what other cool things ack can do…
Note: You could also do this with perl, but it looks a lot less maintainable.