docker-ubuntu-vnc-desktop/image/usr/lib/web/log/config.py
2017-02-26 12:53:08 +08:00

89 lines
3.3 KiB
Python

#!/usr/bin/env python
import sys
import logging
import logging.handlers
#The terminal has 8 colors with codes from 0 to 7
BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8)
#These are the sequences need to get colored ouput
RESET_SEQ = "\033[0m"
COLOR_SEQ = "\033[1;%dm"
BOLD_SEQ = "\033[1m"
#The background is set with 40 plus the number of the color,
#and the foreground with 30
COLORS = {
'WARNING': COLOR_SEQ % (30 + YELLOW) + 'WARN ' + RESET_SEQ,
'INFO': COLOR_SEQ % (30 + WHITE) + 'INFO ' + RESET_SEQ,
'DEBUG': COLOR_SEQ % (30 + BLUE) + 'DEBUG' + RESET_SEQ,
'CRITICAL': COLOR_SEQ % (30 + YELLOW) + 'CRITI' + RESET_SEQ,
'ERROR': COLOR_SEQ % (30 + RED) + 'ERROR' + RESET_SEQ,
}
class ColoredFormatter(logging.Formatter):
def __init__(self, msg, use_color=True):
logging.Formatter.__init__(self, msg)
self.use_color = use_color
def format(self, record):
if self.use_color:
record.levelname = COLORS.get(record.levelname, record.levelname)
return logging.Formatter.format(self, record)
class LoggingConfiguration(object):
COLOR_FORMAT = "[%(asctime)s" + \
"][%(threadName)-22s][%(levelname)s] %(message)s " + \
"(" + BOLD_SEQ + "%(filename)s" + RESET_SEQ + ":%(lineno)d)"
NO_COLOR_FORMAT = "[%(asctime)s][%(threadName)-22s][%(levelname)s] " + \
"%(message)s " + \
"(%(filename)s:%(lineno)d)"
FILE_FORMAT = "[%(asctime)s][%(threadName)-22s][%(levelname)s] " + \
"%(message)s "
@classmethod
def set(cls, log_level, log_filename, append=None, **kwargs):
""" Configure a rotating file logging
"""
logger = logging.getLogger()
logger.setLevel(log_level)
COLOR_FORMAT = cls.COLOR_FORMAT
NO_COLOR_FORMAT = cls.NO_COLOR_FORMAT
FILE_FORMAT = cls.FILE_FORMAT
if 'name' in kwargs:
COLOR_FORMAT = COLOR_FORMAT.replace('%(threadName)-22s',
'%-22s' % (kwargs['name']))
NO_COLOR_FORMAT = NO_COLOR_FORMAT.replace(
'%(threadName)-22s', '%-22s' % (kwargs['name']))
FILE_FORMAT = FILE_FORMAT.replace(
'%(threadName)-22s', '%s' % (kwargs['name']))
# Log to rotating file
try:
fh = logging.handlers.RotatingFileHandler(log_filename,
mode='a+',
backupCount=3)
fh = logging.FileHandler(log_filename, mode='a+')
fh.setFormatter(ColoredFormatter(FILE_FORMAT, False))
fh.setLevel(log_level)
logger.addHandler(fh)
if not append:
# Create a new log file on every new
fh.doRollover()
except:
pass
# Log to sys.stderr using log level passed through command line
if log_level != logging.NOTSET:
log_handler = logging.StreamHandler(sys.stdout)
if sys.platform.find('linux') >= 0:
formatter = ColoredFormatter(COLOR_FORMAT)
else:
formatter = ColoredFormatter(NO_COLOR_FORMAT, False)
log_handler.setFormatter(formatter)
log_handler.setLevel(log_level)
logger.addHandler(log_handler)