2012-03-20 13:01:21 +00:00
|
|
|
__all__ = [
|
|
|
|
|
'init'
|
|
|
|
|
]
|
|
|
|
|
|
2012-02-21 17:53:53 +01:00
|
|
|
import os
|
|
|
|
|
import sys
|
2012-03-20 13:01:21 +00:00
|
|
|
import logging
|
|
|
|
|
|
|
|
|
|
from logging import Formatter, getLogger, StreamHandler, DEBUG
|
2011-04-18 17:58:48 +02:00
|
|
|
|
2012-03-07 12:17:39 +00:00
|
|
|
|
2012-03-15 19:37:49 +00:00
|
|
|
RESET_TERM = u'\033[0;m'
|
2012-03-07 12:17:39 +00:00
|
|
|
|
|
|
|
|
COLOR_CODES = {
|
2012-03-16 14:50:26 +00:00
|
|
|
'red': 31,
|
|
|
|
|
'yellow': 33,
|
|
|
|
|
'cyan': 36,
|
|
|
|
|
'white': 37,
|
|
|
|
|
'bgred': 41,
|
|
|
|
|
'bggrey': 100,
|
2011-04-18 20:14:07 +02:00
|
|
|
}
|
|
|
|
|
|
2012-03-25 18:47:14 +02:00
|
|
|
|
|
|
|
|
def ansi(color, text):
|
|
|
|
|
"""Wrap text in an ansi escape sequence"""
|
|
|
|
|
code = COLOR_CODES[color]
|
|
|
|
|
return u'\033[1;{0}m{1}{2}'.format(code, text, RESET_TERM)
|
2012-03-07 12:17:39 +00:00
|
|
|
|
2011-04-25 12:13:44 +02:00
|
|
|
|
|
|
|
|
class ANSIFormatter(Formatter):
|
2011-04-18 20:14:07 +02:00
|
|
|
"""
|
|
|
|
|
Convert a `logging.LogReport' object into colored text, using ANSI escape sequences.
|
|
|
|
|
"""
|
|
|
|
|
## colors:
|
2011-04-18 17:58:48 +02:00
|
|
|
|
|
|
|
|
def format(self, record):
|
2011-04-25 12:13:44 +02:00
|
|
|
if record.levelname is 'INFO':
|
2012-03-25 18:47:14 +02:00
|
|
|
return ansi('cyan', '-> ') + unicode(record.msg)
|
2011-04-18 17:58:48 +02:00
|
|
|
elif record.levelname is 'WARNING':
|
2012-03-25 18:47:14 +02:00
|
|
|
return ansi('yellow', record.levelname) + ': ' + unicode(record.msg)
|
2011-04-18 17:58:48 +02:00
|
|
|
elif record.levelname is 'ERROR':
|
2012-03-25 18:47:14 +02:00
|
|
|
return ansi('red', record.levelname) + ': ' + unicode(record.msg)
|
2011-04-18 17:58:48 +02:00
|
|
|
elif record.levelname is 'CRITICAL':
|
2012-03-25 18:47:14 +02:00
|
|
|
return ansi('bgred', record.levelname) + ': ' + unicode(record.msg)
|
2011-04-25 12:13:44 +02:00
|
|
|
elif record.levelname is 'DEBUG':
|
2012-03-25 18:47:14 +02:00
|
|
|
return ansi('bggrey', record.levelname) + ': ' + unicode(record.msg)
|
2011-04-25 12:13:44 +02:00
|
|
|
else:
|
2012-03-25 18:47:14 +02:00
|
|
|
return ansi('white', record.levelname) + ': ' + unicode(record.msg)
|
2011-04-18 20:14:07 +02:00
|
|
|
|
|
|
|
|
|
2011-04-25 12:13:44 +02:00
|
|
|
class TextFormatter(Formatter):
|
2011-04-18 20:14:07 +02:00
|
|
|
"""
|
|
|
|
|
Convert a `logging.LogReport' object into text.
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
def format(self, record):
|
|
|
|
|
if not record.levelname or record.levelname is 'INFO':
|
|
|
|
|
return record.msg
|
|
|
|
|
else:
|
|
|
|
|
return record.levelname + ': ' + record.msg
|
|
|
|
|
|
|
|
|
|
|
2011-04-25 12:13:44 +02:00
|
|
|
def init(level=None, logger=getLogger(), handler=StreamHandler()):
|
2012-03-20 13:01:21 +00:00
|
|
|
logger = logging.getLogger()
|
2012-03-25 18:47:14 +02:00
|
|
|
|
|
|
|
|
if os.isatty(sys.stdout.fileno()) \
|
|
|
|
|
and not sys.platform.startswith('win'):
|
|
|
|
|
fmt = ANSIFormatter()
|
|
|
|
|
else:
|
|
|
|
|
fmt = TextFormatter()
|
2011-04-18 17:58:48 +02:00
|
|
|
handler.setFormatter(fmt)
|
|
|
|
|
logger.addHandler(handler)
|
2012-03-20 13:01:21 +00:00
|
|
|
|
2011-04-20 14:44:25 +02:00
|
|
|
if level:
|
|
|
|
|
logger.setLevel(level)
|
2011-04-18 17:58:48 +02:00
|
|
|
|
|
|
|
|
|
2011-04-18 20:14:07 +02:00
|
|
|
if __name__ == '__main__':
|
2011-04-25 12:13:44 +02:00
|
|
|
init(level=DEBUG)
|
|
|
|
|
|
2012-03-20 13:01:21 +00:00
|
|
|
root_logger = logging.getLogger()
|
|
|
|
|
root_logger.debug('debug')
|
|
|
|
|
root_logger.info('info')
|
|
|
|
|
root_logger.warning('warning')
|
|
|
|
|
root_logger.error('error')
|
|
|
|
|
root_logger.critical('critical')
|