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 .*"

Apache access log colored with ack

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.