|
|
|
|
|
import logging
|
|
|
|
|
|
BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = xrange(30, 38)
|
|
|
|
|
|
# Sequences
|
|
|
RESET_SEQ = "\033[0m"
|
|
|
COLOR_SEQ = "\033[1;%dm"
|
|
|
BOLD_SEQ = "\033[1m"
|
|
|
|
|
|
COLORS = {
|
|
|
'CRITICAL': MAGENTA, # level 50
|
|
|
'ERROR': RED, # level 40
|
|
|
'WARNING': CYAN, # level 30
|
|
|
'INFO': GREEN, # level 20
|
|
|
'DEBUG': BLUE, # level 10
|
|
|
}
|
|
|
|
|
|
class ColorFormatter(logging.Formatter):
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
# can't do super(...) here because Formatter is an old school class
|
|
|
logging.Formatter.__init__(self, *args, **kwargs)
|
|
|
|
|
|
def format(self, record):
|
|
|
"""
|
|
|
Changes record's levelname to use with COLORS enum
|
|
|
"""
|
|
|
|
|
|
levelname = record.levelname
|
|
|
start = COLOR_SEQ % (COLORS[levelname])
|
|
|
def_record = logging.Formatter.format(self, record)
|
|
|
end = RESET_SEQ
|
|
|
|
|
|
colored_record = start + def_record + end
|
|
|
return colored_record
|
|
|
|
|
|
logging.ColorFormatter = ColorFormatter
|
|
|
|