The beauty of ruby makes it simple to add some colorful syntax highlighting to log messages that are displayed in your capistrano scripts.  Here’s a chunk of code I added to my utility.rb file that is included by my capfile that performs the magic.


def colorize(text, color_code)
"#{color_code}#{text}\033[0m"
end


def red(text); colorize(text, "\033[31m"); end
def boldred(text); colorize(text, "\033[1;31m"); end
def green(text); colorize(text, "\033[32m"); end
def boldgreen(text); colorize(text, "\033[1;32m"); end
def yellow(text); colorize(text, "\033[33m"); end
def boldyellow(text); colorize(text, "\033[1;33m"); end
def blue(text); colorize(text, "\033[34m"); end
def boldblue(text); colorize(text, "\033[1;34m"); end
def purple(text); colorize(text, "\033[35m"); end
def boldpurple(text); colorize(text, "\033[1;35m"); end
def cyan(text); colorize(text, "\033[36m"); end
def boldcyan(text); colorize(text, "\033[1;36m"); end
def white(text); colorize(text, "\033[37m"); end
def boldwhite(text); colorize(text, "\033[1;37m"); end


def inform(text); green(text); end
def highlight(text); boldgreen(text); end
def warning(text); yellow(text); end
def alert(text); red(text); end
def section(text); "\n\n#{"*" * 50}\n#{text}\n#{"*" * 50}";

Now by utilizing the wrapper methods like this:

task :testconfig do
logoutputDir = Logging.initialize("#{$deployDir}/logs", $envNameName, $envNameNum)
Logging.info inform("*" * 75)
Logging.info inform(" Starting... ")
Logging.info " Env: " + highlight('development')
Logging.info " Date: " + highlight(Time.now.to_s)
Logging.info " User: " + highlight('jsmith')
Logging.info " Logs Dir: " + highlight('/tmp/projectX/log')
Logging.info inform("*" * 75)
Logging.info inform(".. informational message ...")
Logging.info warning(".. warning message ...")
Logging.info alert(".. alert message ...")
Logging.info highlight(".. highlighted message ..")
Logging.info inform("*" * 75)
Logging.info inform(" Done! ")
Logging.info " Date: " + highlight(Time.now.to_s)
Logging.info " Dist: " + highlight('/tmp/projectX/dist')
Logging.info inform("*" * 75)
end

You'll get pretty output like this:

Sample console output

Sample console output

Post to Twitter Tweet This Post