1
0
Fork 0
forked from github/pelican
pelican-theme/pelican/log.py

86 lines
2.2 KiB
Python
Raw Normal View History

__all__ = [
'init'
]
import os
import sys
import logging
from logging import Formatter, getLogger, StreamHandler, DEBUG
RESET_TERM = u'\033[0;m'
COLOR_CODES = {
'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)
class ANSIFormatter(Formatter):
2011-04-18 20:14:07 +02:00
"""
Convert a `logging.LogReport' object into colored text, using ANSI escape sequences.
"""
## colors:
def format(self, record):
if record.levelname is 'INFO':
2012-03-25 18:47:14 +02:00
return ansi('cyan', '-> ') + unicode(record.msg)
elif record.levelname is 'WARNING':
2012-03-25 18:47:14 +02:00
return ansi('yellow', record.levelname) + ': ' + unicode(record.msg)
elif record.levelname is 'ERROR':
2012-03-25 18:47:14 +02:00
return ansi('red', record.levelname) + ': ' + unicode(record.msg)
elif record.levelname is 'CRITICAL':
2012-03-25 18:47:14 +02:00
return ansi('bgred', record.levelname) + ': ' + unicode(record.msg)
elif record.levelname is 'DEBUG':
2012-03-25 18:47:14 +02:00
return ansi('bggrey', record.levelname) + ': ' + unicode(record.msg)
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
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
def init(level=None, logger=getLogger(), handler=StreamHandler()):
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()
handler.setFormatter(fmt)
logger.addHandler(handler)
2011-04-20 14:44:25 +02:00
if level:
logger.setLevel(level)
2011-04-18 20:14:07 +02:00
if __name__ == '__main__':
init(level=DEBUG)
root_logger = logging.getLogger()
root_logger.debug('debug')
root_logger.info('info')
root_logger.warning('warning')
root_logger.error('error')
root_logger.critical('critical')