Source code for tardis.io.logger.colored_logger

import logging

"""
Code for Custom Logger Classes (ColoredFormatter and ColorLogger) and its helper function
(formatter_message) is used from this thread
http://stackoverflow.com/questions/384076/how-can-i-color-python-logging-output
"""

FORMAT = "[$BOLD{name:20s}$RESET][{levelname:18s}]  \n\t{message:s} ($BOLD{filename:s}$RESET:{lineno:d})"
DEBUG_FORMAT = "[$BOLD{name:20s}$RESET][{levelname:18s}]  {message:s} ($BOLD{filename:s}$RESET:{lineno:d})"


[docs]def formatter_message(message, use_color=True): """ Helper Function used for Coloring Log Output """ # These are the sequences need to get colored ouput RESET_SEQ = "\033[0m" BOLD_SEQ = "\033[1m" if use_color: message = message.replace("$RESET", RESET_SEQ).replace( "$BOLD", BOLD_SEQ ) else: message = message.replace("$RESET", "").replace("$BOLD", "") return message
[docs]class ColoredFormatter(logging.Formatter): """ Custom logger class for changing levels color """ def __init__(self, use_color=True): self.non_debug = formatter_message(FORMAT, True) self.debug = formatter_message(DEBUG_FORMAT, True) logging.Formatter.__init__(self, self.non_debug, style="{") self.use_color = use_color
[docs] def format(self, record): COLOR_SEQ = "\033[1;%dm" RESET_SEQ = "\033[0m" BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8) COLORS = { "WARNING": YELLOW, "INFO": WHITE, "DEBUG": BLUE, "CRITICAL": YELLOW, "ERROR": RED, } levelname = record.levelname if self.use_color and levelname in COLORS: levelname_color = ( COLOR_SEQ % (30 + COLORS[levelname]) + levelname + RESET_SEQ ) record.levelname = levelname_color if record.levelno == logging.DEBUG: self._style._fmt = self.debug else: self._style._fmt = self.non_debug return logging.Formatter.format(self, record)
[docs]class ColoredLogger(logging.Logger): """ Custom logger class with multiple destinations """ COLOR_FORMAT = formatter_message(FORMAT, True) def __init__(self, name): logging.Logger.__init__(self, name, logging.DEBUG) color_formatter = ColoredFormatter(self.COLOR_FORMAT) console = logging.StreamHandler() console.setFormatter(color_formatter) self.addHandler(console) return